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

目录

为啥要静态化

Thymeleaf的重要概念

实现页面静态化

1.新建一个Service

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

3.配置nginx

4.重启

5.查看效果

静态化页面的访问流程


 

为啥要静态化

 

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

那用什么工具呢?localstorge不合理,存的东西太小了,redis也不合理,即使是30G的redis都可能被撑到满负荷,在springboot和springcloud项目中,使用thymeleaf是一个非常好的选择,我们把页面转换为静态html保存到nginx的html文件夹下。这样这些请求直接被nginx处理掉了~当向nginx请求时,直接把静态页面返回给前端即可。 

当用户发起请求时,先寻找本地,本地的nginx/html文件夹下没有对应页面再去查库

 

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第1张图片

 

 

Thymeleaf的重要概念

 

  • Context:运行上下文

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

  • TemplateResolver:模板解析器

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

  • TemplateEngine:模板引擎

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

 

 

实现页面静态化

 

1.新建一个Service

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

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第2张图片

 

代码如下

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页面的方法

 

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

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第3张图片

 

3.配置nginx

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

 

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

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第4张图片

 

 

4.重启

 

重启nginx

nginx -s reload

 

重新启动java项目

 

5.查看效果

访问指定的页面

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第5张图片

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

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第6张图片

 

静态化页面的访问流程

 

SpringBoot中如何通过thymeleaf实现HTML页面静态化_第7张图片

 

你可能感兴趣的:([电商项目],[SpringBoot])