页面静态化
程序员文章站
2022-03-13 17:45:12
...
-
WHAT?
静态化是指把动态生成的HTML页面变为静态内容保存,以后用户的请求到来,直接访问静态页面,不再经过服务的渲染。
而静态的HTML可以部署在nginx中,从而大大的提高并发能力,减小tomcat压力。 -
HOW?
目前,静态化页面都是通过模板引擎来生成,而后保存到Nginx服务器来部署,常用的模板引擎比如:
Freemarker
Velocity
Thymeleaf
Thymeleaf实现静态化
概念:
-
Context:运行上下文
上下文:用来保存模型数据,当模板引擎染时,可以从Context上下文中获取数据用于渲染。
当与SpringBoot结合使用时,我们放入Model的数据就会被处理到Context,作为模板池染的数据使用。 -
TemplateResolver:模板解析器
模板解析器:用来读取模板相关的配置,例如:模板存放的位置信息,模板文件名称,模板文件的类型等等。
当与SpringBoot结合时,TemplateResolver已经由其创建完成, 并且各种配置也都有默认值,比如模板存放位
置,其默认值就是: templates. 比如模板文件类型,其默认值就是html. -
TemplateEngine:模板引擎
模板引擎:用来解析模板的引擎,需要使用到上下文、模板解析器。分别从两者中获取模板中需要的数据,模板文
件。然后利用内置的语法规则解析,从而输出解析后的文件。来看下模板引擎进行处理的函数:
templateEngine.process("",context,writer);
三个参数:
模板名称
上下文:里面包含模型数据
writer:输出目的地的流
写一个GoodsHtmlService类
@Service
public class GoodsHTMLService {
@Autowired
private Template engine;
@Autowrited
private GoodsService goodsService;
public void createHtml(Long spuId){
// 初始化运行上下文
Context context = new Context();
// 设置数据模型
context.setVariables(this.goodsService.loadData(spuId));
PrintWriter printWriter = null;
try {
File file = new File("C:\\tools\\nginx-1.14.0\\html\\item\\" + spuId + ".html");
printWrite = new PrintWrite(file);
this.engine.process("item",context,printWriter);
}catch(FileNotFoundExcepton e) {
e.printStackTrace();
}finally{
if(printWriter != null){
printWriter.close();
}
}
}
}
在GoodsController里添加次方法
@Autowired
private GoodsHtmlService goodsHtmlService;
@GetMapping("item/{id}.html")
public String toItemPage(@PathVariable("id)Long id){
this.goodsHtmlService.createHtml(id);
return "item";
}
Nginx代理静态页面
location /item {
# 先找本地
root html;
if (!-f_$request_filename) {#请求的文件不存在,就反向代理
proxy_pass http://127.0.0.1:8084;
break;
}
}