一、常用模板引擎对比

简介
jspJava Server Pages,动态网页技术,由应用服务器中的JSP引擎来编译和执行,再将生成的整个页面返回给客户端。支持表达式语言(EL、JSTL)。因为其是在服务器端渲染的,消耗性能,所以springboot项目中不在推荐使用jsp
freemarker文件一般保存为 xxx.ftl,严格依赖MVC模式,不依赖Servlet容器(不占用JVM内存),其语法对比thymeleaf较为复杂
thymeleafspringboot主推的模板引擎,轻量级的模板引擎(负责逻辑业务的不推荐,解析DOM或者XML会占用多的内存)。可以直接在浏览器中打开且正确显示,表达式并不会影响,模板页面文件以html结尾

二、thymeleaf标签

①th:text

​ 设置当前元素的文本内容。类似修改制定属性的还有th:utext,区别在于后者不会转义html标签

②th:value

​ 设置当前元素的value值。类似的还有th:srcth:href

③th:each

​ 循环遍历元素。th:each="item : ${collection}",然后使用th:text="${item}"赋值表达式给标签赋值

④th:if

​ 条件判断。类似th:unlessth:switchth:case。判断不为空才显示th:if="${not #strings.isEmpty(result)}"

⑤th:insert

​ 代码块引入。,类似的有th:replace,th:include;th:insert插入到当前标签下,th:insert:保留自己的主标签,保留th:fragment的主标签。tth:replace:不要自己的主标签,保留th:fragment的主标签。th:include:不要自己的主标签,保留th:fragment的主标签。(官方3.0后不推荐使用)。

⑥th:fragment

​ 定义代码块

⑦th:object

​ 声明变量。一般和*{}一起配合使用

三、thymeleaf表达式

①${…}:变量表达式

常用内置对象

说明
ctx上下文对象
vars上下文变量
locale上下文的语言对象
request获取HttpServletRequest对象
response获取HttpServletResponse对象
session获取HttpSession对象

常用内置方法

说明
strings字符串格式化方法,如equals、equalsIgnoreCase、length、trim、toUpperCase、toLowerCase、indexOf、substring、replace、startWith、endsWith、contains、containsIgnoreCase等
numbersformatDecimal
boolsisTrue、isFalse
arraystoArray,length,isEmpty,contains,containsAll等
list、setstoList,size,isEmpty,contains,containsAll,sort等
mapssize,isEmpty,containsKey,containsValue等
datesformat,year,month,hour,createNow等

②@{…}:链接表达式

​ 可以动态获取项目路径

③#{…}:消息表达式

④~{…}:代码块表达式

​ 支持两种语法结构
​ 推荐:~{templatename::fragmentname}
​ 支持:~{templatename::#id}

⑤*{…}:选择变量表达式

​ 多用于和th:object结合使用

四、使用thymeleaf需要注意

1、声明名称空间:xmlns:th="http://www.thymeleaf.org

2、设置文本内容th:text,设置input的值th:value,循环输出th:each,条件判断th:if,插入代码块th:insert,定义代码块th:fragment,声明变量th:object

3、th:each放在需要被循环的标签上。

4、变量表达式中提供了很多的内置方法,该内置方法是用#开头,请不要与#{}消息表达式弄混。

5、th:insertth:replaceth:include三种插入代码块的效果相似,但区别很大。

五、SpringBoot应用中使用thymeleaf

①引入thymeleaf依赖

<dependency> 
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>

②添加配置

#通常thymeleaf默认的编码是HTML5,此时thymeleaf对一些标签的校验非常严格,通常我们需要添加配置spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.mode=LEGACYHTML5
#关闭thymeleaf缓存 开发时使用 否则没有实时画面
spring.thymeleaf.cache=false

③添加nekohtml依赖

设置了spring.thymeleaf.mode=LEGACYHTML5后就需要引入搭配一个额外的库NekoHTML

<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.9.15</version>
</dependency>
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐