商品详情页-数据显示
运用Freemarker技术来实现商品详细页的静态化。通过地址栏输入某地址,如下形式
http://localhost:9101/gen_item.do?goodsId=149187842867979
能在本地电脑某目录生成商品详细页,页面的名称为商品id.html
工程搭建
服务接口层
- 创建pinyougou-page-interface工程
- 创建com.pinyougou.page.service包
- 包下创建接口ItemPageService
package com.pinyougou.page.service;
/**
* Title: ItemPageService
* Description: 生成页面
* @author: 张楚楚
* @date 2019年2月28日下午3:01:38
*/
public interface ItemPageService {
/**
* 生成商品详细页
* @param goodsId
* @return
*/
public boolean genItemHtml(Long goodsId);
}
服务实现层
- 创建war工程pinyougou-page-service
- pom.xml引入依赖 参见其它服务工程, 另外添加freemarker依赖
<!-- freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
- 添加web.xml 参见其它服务工程
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
- spring配置文件 参见其它服务工程 ,另外配置:
这是spring提供的对freemarker支持的配置文件,属性分别为模板目录和字符集
在WEB-INF下创建ftl目录
<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>
另网页生成目录也可写入配置文件中
- 创建属性文件page.properties
pagedir=d:\\item\\
- 建立com.pinyougou.page.service.impl包
- 包下建立类ItemPageServiceImpl
@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;
}
}
}
- 将item.html拷贝至web-inf/ftl下
- 修改扩展名为ftl
- 将商品名称用插值代替
<div class="sku-nam