商品详情页-数据显示 2.1 需求分析运用 Freemarker 技术来实现商品详细页的静态化。通过地址栏输入某地址,如下形式 http://localhost:9101/gen_item.do?goodsId=149187842867952
能在本地电脑某目录生成商品详细页,页面的名称为商品 id.html 2.2 工程搭建 2.2.1 服务接口层 创建 pinyougou-page-interface 工程,创建 com.pinyougou.page.service 包,包下创建接口
/**
*商品详细页接口
*@author Administrator
*
*/
public interface ItemPageService {
/**
*生成商品详细页
*@param goodsId
*/
public boolean genItemHtml(Long goodsId);
}
2.1.1 服务实现层 (1)创建 war 工程 pinyougou-page-service (2)pom.xml 引入依赖 参见其它服务工程, 另外添加 freemarker 依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
(3)添加 web.xml 参见其它服务工程 (4)spring 配置文件 参见其它服务工程 ,另外配置:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
(5)创建属性文件 内容为:
pagedir=d:\\item\\
用于配置网页生成目录
(6)建立 com.pinyougou.page.service.impl 包,包下建立类
@Service
public class ItemPageServiceImpl implements ItemPageService {
@Value("${pagedir}")
private String pagedir;
@Autowired
private FreeMarkerConfig freeMarkerConfig;
@Autowired
private TbGoodsMapper goodsMapper;
@Autowired
private TbGoodsDescMapper goodsDescMapper;
@Override
public boolean genItemHtml(Long goodsId){
try {
Configuration configuration = freeMarkerConfig.getConfiguration(); Template template = configuration.getTemplate("item.ftl");
Map dataModel=new HashMap<>();
//1.加载商品表数据
TbGoods goods = goodsMapper.selectByPrimaryKey(goodsId); dataModel.put("goods", goods);
//2.加载商品扩展表数据
TbGoodsDesc goodsDesc = goodsDescMapper.selectByPrimaryKey(goodsId); dataModel.put("goodsDesc", goodsDesc);
Writer out=new FileWriter(pagedir+goodsId+".html"); template.process(dataModel, out);
out.close();
return true;
} catch (Exception e) { e.printStackTrace(); return false;
}
}
}
(7)将 item.html 拷贝至 web-inf/ftl 下 ,修改扩展名为 ftl ,将商品名称用插值代替
<div class="sku-name">
<h4>${goods.goodsName}</h4>
</div>
(8)在 D 盘建立文件夹 item,将必要的样式表和 Js 拷贝到此目录下,此目录为生成的目录 2.1.1 运营商管理后台 (1)pinyougou-manager-web 引入依赖 pinyougou-page-interface (2)在 GoodsController.java 中新增方法
@Reference(timeout=40000)
private ItemPageService itemPageService;
/**
*生成静态页(测试)
*@param goodsId
*/ @RequestMapping("/genHtml")
public void genHtml(Long goodsId){ itemPageService.genItemHtml(goodsId);
}