程序先于用户获取资源或数据库数据进而通过静态化处理,生成一个静态页面,而用户直接请求获取该静态页面,静态化处理页面本身的访问速度较动态页面快很多倍,因此程序性能会有大大的提升。
静态化页面上的体现为:访问速度快,用户体验性明显提升;在后台体现为:访问脱离数据库,减轻了数据库访问的压力。
代码实现1.首先添加thymeleaf的pom文件
org.springframework.boot spring-boot-starter-thymeleaf
2.创建一个thymeleaf的html模板
Title
3.在Service里实现代码
public String createInformation(String data,String informationId) {
if(StringUtil.isEmpty(data)){
return null;
}
//创建一个正文
Context context = new Context();
String objectName = informationId + ".html";
//对应模板数据
context.setVariable("data",data);
String information = templateEngine.process("Information", context);
String url = null;
InputStream inputStream = null;
//转成二进制放到minio服务器
try {
inputStream = IOUtils.toInputStream(information);
minioClient().putObject("hycloud",objectName,inputStream,"text/html");
url = minioClient().getObjectUrl("hycloud",objectName);
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
}
4.前端获取url直接渲染静态页面即可
碰到的坑问题一:
前端传带标签的html字符串时,特殊字符比如<、>等接收参数时会丢失,查了一下原因,大概是java在传递参数时,使用的编码方式对某些特殊字符不进行处理。
解决:将特殊字符进行转义,比如<转义成>等,接收完毕后在转义回去
使用的工具类是
StringEscapeUtils.unescapeHtml();
问题二:
打成jar包发布到服务器上(别问为什么,这公司就这样),出现Error resolving template template might not exist or might not be accessible的错误,大概就是找不到html模板文件。
查了一下,发现 servlet3.0有一个特性:
在servlet3.0协议规范中,包含在jar文件 /meta-INFO/resources/ 路径下的资源是可以直接访问的。也就是说其他文件下无法直接访问,要不就用流的方式读取文件。
/meta-INFO/resources 目录需要放在resources下
重新打包发布接口测试成功



