是指把动态生成的HTML页面变为静态内容保存,以后用户的请求到来,直接访问静态页面,不再经过服务的渲染。 而静态的HTML页面可以部署在nginx中,从而大大提高并发能力,减小tomcat、数据库的压力。
对于电商网站来说,商品页面每时每刻都会有大量的用户流量,每个用户在当前浏览的页面就可能会有几十张图片,而且经常会需要动态加载,所以我们就想用静态化提高页面访问速度。
那用什么工具呢?localstorge不合理,存的东西太小了,redis也不合理,即使是30G的redis都可能被撑到满负荷,在springboot和springcloud项目中,使用thymeleaf是一个非常好的选择,我们把页面转换为静态html保存到服务器的硬盘中。
用来保存模型数据,当模板引擎渲染时,可以从Context上下文中获取数据用于渲染。当与SpringBoot结合使用时,我们放入Model的数据就会被处理到Context,作为模板渲染的数据使用
当与SpringBoot结合时,TemplateResolver已经由其创建完成,并且各种配置也都有默认值,比如模板存放位置,其默认值就是:templates。比如模板文件类型,其默认值就是html
用来解析模板的引擎,需要使用到上下文、模板解析器。分别从两者中获取模板中需要的数据,模板文件。然后利用内置的语法规则解析,从而输出解析后的文件。来看下模板引擎进行处理的函数
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
package com.shenmazong.thymeleaf.task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import java.io.File;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
/**
* @author 军哥
* @version 1.0
* @description: 定时生成静态页面
* @date 2022/2/16 20:57
*/
@Component
@EnableScheduling
@Slf4j
public class MakeHtmlTask {
@Autowired
private TemplateEngine templateEngine;
// 每分钟执行一次
@Scheduled(fixedRate = 1000*60)
public void makeHtml() {
// 静态文件存储路径
String storeDir = "D:\\temp";
// 获取数据
Map<String, Object> map = new HashMap<>();
map.put("name", "alex");
map.put("age", 20);
map.put("email", "3350996729@qq.com");
// 上下文
Context context = new Context();
context.setVariables(map);
// 输出流
File dest = new File(storeDir, "test.html");
if (dest.exists()) {
dest.delete();
}
try (PrintWriter writer = new PrintWriter(dest, "UTF-8")) {
// 生成html,第一个参数是thymeleaf页面下的原型名称
// test参数为templates目录下的test.html文件
templateEngine.process("make", context, writer);
log.info("执行生成页面成功!!!");
} catch (Exception e) {
log.error("[静态页服务]:生成静态页异常", e);
}
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>静态页面模板</title>
</head>
<body>
<div>
<div th:text="${name}">name</div>
<div th:text="${age}">name</div>
<div th:text="${email}">name</div>
</div>
</body>
</html>