Thymeleaf模板引擎
一、first
通过这篇博文,您将了解到什么是Thymeleaf,以及和springboot作为伴侣她是如何使用的,同时还有一些简单的页面缓存的内容。
二、what is it
Thymeleaf是模板引擎,可以处理html,xml,js,css,甚至是纯文本(text),特别是html5。官网对他的解释是:是一个适用于web和独立环境的现代服务器端java模板引擎。
它可以完全替代JSP,她具有以下特点:
1. 支持html原形,在html标签里增加额外的属性来达到模板+数据的展示方式;浏览器解释html时会忽略未定义的标签属性,所以thymeleaf模板可以静态的运行;当有数据返回页面时,thymeleaf标签会动态地替换掉静态内容,使页面动态显示。
2. thymeleaf开箱即用,可以直接套用模板实现JSTL表达式效果,避免每天改模板,改jstl,比较优雅,同时开发人员可以扩展和创建自定义方言。
三、 using(+springboot)
3.1 添加依赖
和springboot一起使用,方便很多加入如下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
3.2 增加配置
在属性配置文件中可以增加如下配置:我们可以看到,thymeleaf使用的页面都是html格式的。
spring:
#thymeleaf
thymeleaf:
cache: false
servlet:
content-type: text/html
enabled: true
encoding: UTF-8
mode: HTML5
prefix: classpath:/templates/
suffix: .html
3.3 使用
在html的头部增加配置
<html xmlns:th="http://www.thymeleaf.org">
例如经典的welcom页面如下:
<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org/">
<head>
<title>hello</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
</head>
<body>
<p th:text="'hello:'+${name}"></p>
</body>
</html>
在controller中我们的写法是,这事html中便可以获得${name}便是model中添加model的属性内容。关于更多的使用方式,请移步官网:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#what-is-thymeleaf
/**
* 页面跳转:hello頁面
* @return
*/
@RequestMapping("/thymeleaf")
public String thymeleaf(Model model){
model.addAttribute("name","viola!");
return "hello";
}
三、 页面缓存
为什么要使用页面缓存呢,对于不经常变动的页面,我们可以设置一定的缓存时间,将其缓存起来(可以缓存在redis中);页面缓存又是什么呢?页面缓存的是整个页面,我们从redis中取出整个页面显示,是不是比每次加载会更快一些呢?下面是thymeleaf使用的页面渲染技术。操作的步骤是:1.取缓存,2.手动渲染,3.输出结果。
@Resource
ThymeleafViewResolver thymeleafViewResolver;
/**
* 商品列表页面
* 优化:页面缓存
* @return
*/
@GetMapping(value = "/goods/to_list",produces = "text/html")
@ResponseBody
public String goods(HttpServletRequest request, HttpServletResponse response,Model model, MiaoShaUser user){
model.addAttribute("user",user);
//页面缓存
//取缓存
String html=redisService.get(GoodsKey.getGoodsList,"",String.class);
//redis中有:直接返回使用
if (!StringUtils.isEmpty(html)){
return html;
}
//redis中没有:存
//商品信息
List<GoodsVo> goodsList=goodsService.listGoodsVo();
model.addAttribute("goodsList",goodsList);
//手动渲染
WebContext cxt=new WebContext(request,response,request.getServletContext(),request.getLocale(),model.asMap());
html=thymeleafViewResolver.getTemplateEngine().process("goods_list",cxt);
if (!StringUtils.isEmpty(html)){
redisService.set(GoodsKey.getGoodsList,"",html);
}
return html;
}
四、 静态页面