Thymeleaf实现页面静态化

在商城平台门户网站中,商品详情浏览量比较大,并发高,我们会独立开启一个微服务,用来展示商品详情,同时将商品详情页面静态化,减轻服务器运行压力,并且提升响应效率。如jd商品详情就是静态页面:

Thymeleaf实现页面静态化

Thymeleaf简单使用

1、引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2、application.yml:

spring:
  thymeleaf:
    cache: false

3、准备一个商品详情页面模板到当前项目resource目录下的templates中

4、Thymeleaf语法:

<div class="crumb-wrap">
    <ul class="sui-breadcrumb">
        <li th:each="category : ${categories}">//th:each:遍历
            <a href="#" th:text="${category.name}">手机</a>
        </li>
        <li>
            <a href="#" th:text="${brand.name}">Apple</a>
        </li>
        <li class="active" th:text="${spu.title}">Apple iPhone 6s</li>
    </ul>
</div>
<script th:inline="javascript">
    const a = /*[[${a}]]*/ [];//意思是有模型数据a则赋值a,否则为空数组
</script>

idea开发时防止idea不识别thymeleaf指令:

<html xmlns:th="http://www.thymeleaf.org">

建议只用Thymeleaf语法赋值,渲染仍然使用vue语法,降低学习成本

5、Thymeleaf将页面静态化(建议交给线程池异步进行)

service:

    @Async
    //此注解表示该方法异步执行,如果配置了线程池会自动将任务交给线程池
    //参数map为模型数据,id用于生成静态页面时作为文件名
    public void buildStaticHtml(Map<String, Object> map, Long id) {
        //通过thymeleaf创建静态页面
        Context context = new Context();
        context.setVariables(map);
        String folder = "D:\\ide\\nginx-1.17.6\\html\\item\\";
        File file = new File(folder);
        if (!file.exists()) {
            file.mkdirs();
        }
        //jdk1.8新语法,会自动finally关闭流
        try(FileWriter writer = new FileWriter(folder + id + ".html")) {
            //模板+模型数据=输出
            templateEngine.process("模板名", context, writer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

注意:controller如果要返回加载了模型数据的模板页面,则不能是RestFul风格,否则只会返回字符串

接下来,我们修改nginx,让它对商品请求进行监听,指向本地静态页面,如果本地没找到,才进行反向代理:

    location /item {
        # 先找本地
        root html;
        if (!-f $request_filename) { #请求的文件不存在,就反向代理
            proxy_pass http://127.0.0.1:8084;
            break;
        }
    }

上一篇:在mui中遇到的内容覆盖导航栏的问题


下一篇:Java项目:旅游酒店管理系统(java+SpringBoot+Mybatis+Thymeleaf+mysql)