商品详情页-数据显示 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);
}