使用freemarker实现页面静态化

第一步:创建Service接口及实现类

使用freemarker实现页面静态化_第1张图片

第二步:在classpath下创建config/freemarker.xml

使用freemarker实现页面静态化_第2张图片

第三步:在StaticPageServiceImpl中声明Freemarker配置类

//声明 freemarker配置类
private Configuration conf;

//实现化配置类
public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer){
	this.conf = freeMarkerConfigurer.getConfiguration();
}

第四步:使用Springmvc自带的Freemarker类实例化Freemarker








第五步:StaticPageServiceImpl实现ServletContextAware接口

/**
 * 静态化页面
 * @author lx
 *
 */
public class StaticPageServiceImpl implements StaticPageService ,ServletContextAware{
	//获取项目中的 全路径
	public String get(String path){
		return servletContext.getRealPath(path);
	}

//获取到了 servletContext 容器的上下文
private ServletContext servletContext;
@Override
public void setServletContext(ServletContext servletContext) {
	this.servletContext = servletContext;
}
}

第六步:路径设定

模板路径:/WEB-INF/ftl/productDetail.html
静态化生成html所在路径"/html/product/" + id + “.html”
第七步:静态化方法书写
//静态化开始

public void staticPageIndex(Map data,Integer id) {
		//设置模板的文件夹路径
		//获取模板  /WEB-INF/ftl/prodcutDetail.html
		//输出路径  webapp/html/ + prouduct/ + id + ".html"
		String tpl = "productDetail.html";
		String outPath = get("/html/product/" + id + ".html");
		
		File f = new File(outPath);
		File p = f.getParentFile();
		
		if(!p.exists()){
			p.mkdirs();
		}
		try {
			Writer out = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
			Template template = conf.getTemplate(tpl);
			template.process(data, out);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TemplateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

第八步:Map data加载

cn.itcast.core.controller.admin.ProductController
//上架商品

	@RequestMapping(value = "/product/show.shtml")
	public String show(Integer[] ids){
		//1:更改商品上架状态
		Product product = new Product();
		product.setIsShow(1);
		if(null != ids && ids.length > 0){
			for(Integer id : ids){
				product.setId(id);
				productService.updateProductByKey(product);
				
				//加载静态化所需要的数据
				Map data = new HashMap();
				//业务数据
				//1商品
				Product p = productService.getProductByKey(id);
				//2:图片加载
				//3:加载sku
				SkuQuery skuQuery = new SkuQuery();
				skuQuery.setProductId(id);
				//3:此商品  库存大于0的
				List skus = skuService.getStock(skuQuery);
				if(null != skus && skus.size() > 0){
					//4:不一样的颜色ID集合
					List colorIds = new ArrayList();
					
					for(Sku sku : skus){
						if(!colorIds.contains(sku.getColorId())){
							colorIds.add(sku.getColorId());
						}
					}
				
					data.put("colors", colorService.getColorsByKeys(colorIds));
					data.put("skus", skus);
				}
				data.put("product", p);
				//传数据  开始静态化
				staticPageService.staticPageIndex(data,p.getId());
			}
		}else{
			//提示 至少选择一个商品  再上架
		}
		return "redirect:/product/list.do";
	}

第九步:tomcat的发布目录下
在这里插入图片描述

第十步:编写前台商品列表页面
front_page/product/product.jsp
修改前:

从此页面跳转商品详情页面的路径
修改后:

第十一步:点击此按钮可直接跳转至静态页面
使用freemarker实现页面静态化_第3张图片

你可能感兴趣的:(JavaEE)