欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

页面静态化

程序员文章站 2022-03-13 17:45:12
...
  • WHAT?
    静态化是指把动态生成的HTML页面变为静态内容保存,以后用户的请求到来,直接访问静态页面,不再经过服务的渲染。
    而静态的HTML可以部署在nginx中,从而大大的提高并发能力,减小tomcat压力。

  • HOW?
    目前,静态化页面都是通过模板引擎来生成,而后保存到Nginx服务器来部署,常用的模板引擎比如:
    Freemarker
    Velocity
    Thymeleaf

Thymeleaf实现静态化

概念:

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

  2. TemplateResolver:模板解析器
    模板解析器:用来读取模板相关的配置,例如:模板存放的位置信息,模板文件名称,模板文件的类型等等。
    当与SpringBoot结合时,TemplateResolver已经由其创建完成, 并且各种配置也都有默认值,比如模板存放位
    置,其默认值就是: templates. 比如模板文件类型,其默认值就是html.

  3. 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;
	}
}

重启Nginx

页面静态化

相关标签: 小知识