SpringBoot中如何通过thymeleaf实现HTML页面静态化

目录

为啥要静态化

Thymeleaf的重要概念

实现页面静态化

1.新建一个Service

2.调用静态化HTML页面的方法

3.配置nginx

4.重启

5.查看效果


为啥要静态化

对于电商网站来说,商品页面每时每刻都会有大量的用户流量,每个用户在当前浏览的页面就可能会有几十张图片,而且经常会需要动态加载,所以我们就想用静态化提高页面访问速度。

那用什么工具呢?localstorge不合理,存的东西太小了,redis也不合理,即使是30G的redis都可能被撑到满负荷,在springboot和springcloud项目中,使用thymeleaf是一个非常好的选择,我们把页面转换为静态html保存到服务器的硬盘中。 

Thymeleaf的重要概念

  • Context:运行上下文

用来保存模型数据,当模板引擎渲染时,可以从Context上下文中获取数据用于渲染。当与SpringBoot结合使用时,我们放入Model的数据就会被处理到Context,作为模板渲染的数据使用

  • TemplateResolver:模板解析器

当与SpringBoot结合时,TemplateResolver已经由其创建完成,并且各种配置也都有默认值,比如模板存放位置,其默认值就是:templates。比如模板文件类型,其默认值就是html

  • TemplateEngine:模板引擎

用来解析模板的引擎,需要使用到上下文、模板解析器。分别从两者中获取模板中需要的数据,模板文件。然后利用内置的语法规则解析,从而输出解析后的文件。来看下模板引擎进行处理的函数

实现页面静态化

1.新建一个Service

在service里我们配置静态化的方法,以及声明静态化文件保存的位置

代码如下

package com.leyou.goods.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

@Service
public class GoodsHtmlService {

    @Autowired
    private TemplateEngine engine;

    @Autowired
    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("G:\\software\\nginx\\nginx-1.14.0\\html\\item\\" + spuId + ".html");
            printWriter = new PrintWriter(file);
            this.engine.process("item", context, printWriter);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if(printWriter != null) {
                printWriter.close();
            }
        }
    }
}

2.调用静态化HTML页面的方法

正常执行代码时,你在哪一步需要执行刚才写的静态化方法呢?例如我在页面加载完成时,要执行一个静态化本地页面的方法,我把方法写在这里

3.配置nginx

首先我们要在nginx的html文件夹中在新建一个子目录,就叫他item吧,这里面放页面加载时持久化到本地的html页面

然后我们打开nginx.conf,在里面修改配置。这里设置的意思是,只要我们访问item路径下,nginx就先查询本地文件夹中是否有持久化好的html页面,如果有则调用,如果没有再去执行项目中的方法。

4.重启

重启nginx

nginx -s reload

重新启动java项目

5.查看效果

访问指定的页面

可以看到当我们第一次访问成功后,在nginx的html文件夹中已经持久化了这一个html网页

发布了343 篇原创文章 · 获赞 162 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/Delicious_Life/article/details/104381199