java秒杀系列(2)- 页面静态化技术



###前言 通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样。

一、服务端渲染方式


####1、接口返回html页面的设置 ```java @Autowired ThymeleafViewResolver thymeleafViewResolver; @Autowired ApplicationContext applicationContext;

@RequestMapping(value="/to_list", produces="text/html")
@ResponseBody
public String goodsList() {
// 业务逻辑
}


####2、先从缓存中取,有就返回。 ```java //取缓存 String html = redisService.get(GoodsKey.getGoodsList, "", String.class); if(!StringUtils.isEmpty(html)) { return html; }

3、缓存中没有,就手动渲染。

springboot1.5.x的写法:

List goodsList = goodsService.listGoodsVo();
model.addAttribute("goodsList", goodsList);
SpringWebContext ctx = new SpringWebContext(request,response, request.getServletContext(),request.getLocale(), model.asMap(), applicationContext );
//手动渲染
html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);

springboot2.x的写法:

WebContext ctx = new WebContext(request, response, request.getServletContext(),  request.getLocale(), model.asMap());
//手动渲染
html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);

4、最后再将渲染内容加入到redis

if(!StringUtils.isEmpty(html)) {
    redisService.set(GoodsKey.getGoodsList, "", html);
}


二、客户端渲染方式(商品详情页)


####1、找到跳转到商品详情页的路径,修改为一个静态html的路径。 在商品列表页,找到跳转到详情页的动态路径,直接修改为一个静态路径,后缀为htm或shtml,总之不要是html即可,因为application.properties中一般会配置后缀为html的都访问templates文件夹下的。 注意代码中详情的链接,指向一个静态页面goods_detail.htm: ```html 秒杀商品列表
商品名称商品图片商品原价秒杀价库存数量详情
http://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78693323