![Spring Boot实战:从0开始动手搭建企业级项目](https://wfqqreader-1252317822.image.myqcloud.com/cover/850/40107850/b_40107850.jpg)
8.3 Spring Boot之Thymeleaf整合
这一节主要介绍Thymeleaf的整合过程和注意事项,并通过一个实践案例进行讲解。
8.3.1 引入Thymeleaf依赖
因为Spring Boot官方提供了Thymeleaf的场景启动器spring-boot-starter-thymeleaf,因此可以直接在pom.xml文件中添加该场景启动器,最终的pom.xml文件代码如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/152-1.jpg?sign=1739257120-B3iOSxH63KKZN8TzwcQTG5L2sylrqWv8-0-205e3b29cc1a71f3c8dd356d637bcc6a)
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/153-1.jpg?sign=1739257120-BAyTGr7I2eWCx45XfRKU02UX8NeWOdvQ-0-80c234bf5e88176c498d25ff3c1c174f)
8.3.2 创建模板文件
在resources/templates目录下新建模板文件thymeleaf.html。Thymeleaf模板引擎的默认后缀名即为.html。在新增文件后,首先在模板文件的标签中导入Thymeleaf的名称空间:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/154-1.jpg?sign=1739257120-eeuaDFJDQUGqJlTstBiozO6d0vR8k4dt-0-9cba883bfcaebbe629742edc552b70d8)
导入该名称空间主要是为了Thymeleaf语法的提示和Thymeleaf标签的使用。接下来在模板中增加与JSP中相同的显示内容,最终的模板文件代码如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/154-2.jpg?sign=1739257120-6GU6oKLABlXPCNJjSRYMoDgf3u2h1EEZ-0-3c23530fded5b3855195e5bb598d9704)
9.3.3 编辑Controller代码
在controller包下新增ThymeleafController.java文件,将模板文件所需的description字段赋值并转发至模板文件,代码如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/154-3.jpg?sign=1739257120-2fdCwcrLgZE7Spr9TqNHa9L2OdhZKzaj-0-30a94081e002b6c850460c24fc92c834)
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/155-1.jpg?sign=1739257120-L7sZtYw0vNH8t6W7ra9ua5kzfvWDXlrp-0-b67efeae11f42f3e7a606d225b821ced)
最终的代码目录结构如图8-4所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/155-2.jpg?sign=1739257120-YWeVIO0IXKty9S5fD8SLSwIF6MCPdweX-0-ab10453b70fdd446a6eec422062a22d4)
图8-4 Thymeleaf整合完成后的目录结构
在项目启动成功后,打开浏览器并输入本地域名和端口号,访问如下地址:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/155-3.jpg?sign=1739257120-p6y01ZDlhVX07oPh5h3QJEsb5MeRPx0z-0-62b7f687ef513a0ee32576cc8aea50b9)
首先可以看到在原来静态html标签中的内容已经替换为“springboot-thymeleaf”字符串,而不再是默认内容,页面效果如图8-5所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/155-4.jpg?sign=1739257120-K4PwlpULMeJAMkGQIRic4QfMBuyHSYma-0-6fc771f2b76c40aaebc0a3c9fb99e682)
图8-5 Thymeleaf模板引擎渲染结果1
然后把description参数值传给后端处理方法,将模板中的字段改为“我是十三”,页面效果如图8-6所示。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/156-1.jpg?sign=1739257120-hsufEO6KinJc0SuVgDfQjvlDzbREO0Bu-0-8d19eff1fe0dfa4ed25bc0b270e86fb6)
图8-6 Thymeleaf模板引擎渲染结果2
8.3.4 Thymeleaf模板引擎使用注意事项
1. 模板引擎的后缀名称注意事项
虽然Thymeleaf模板引擎文件的后缀名称是.html,但是这种文件严格来说并不属于静态资源文件,而是模板文件,存放的目录也是在模板目录中,与前文中演示的HTML静态页面有一些区别。第7章用到的test.html页面是放在static目录中的,部署后可以直接访问其路径。但是模板引擎文件一般不允许直接访问,而是要经过Controller控制器的处理,将动态数据返回到模板文件中进行读取并渲染的。比如本章演示的几个请求,都在控制器中实现了对应的方法并最终返回一个Thymeleaf视图对象在浏览器中呈现。
2. 必须引入名称空间
名称空间引入方法如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/156-2.jpg?sign=1739257120-53rLKioge3SxLi2nAG7mjuwhawJedIHA-0-9985d00c3aaa6f803930fb7f048b27fd)
虽然不引入以上名称空间,静态资源访问和模板动态访问也不会报错,但是建议在开发过程中最好引入该名称空间。因为在引入之后会有Thymeleaf代码的语法提示,能够提升开发效率,也能减少人为造成的低级错误。有些开发人员可能会忽略这个事情。
3. 禁用模板缓存
Thymeleaf的默认缓存设置是通过配置文件的spring.thymeleaf.cache配置属性决定的。通过图8-7中展示的Thymeleaf模板配置属性类ThymeleafProperties可以发现该属性默认为true,因此Thymeleaf默认是使用模板缓存的。该设置有助于改善应用程序的性能,因此模板只需编译一次即可。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/157-1.jpg?sign=1739257120-V9raHpJq3bO20wyBLhVVtXJ7UGo5tFe2-0-541cabba7e36ec6104bb7af9e1490368)
图8-7 Thymeleaf的默认缓存设置
除非重启应用程序,否则在开发过程中不能实时看到页面变更的效果,因此建议将该属性设置为false,在配置文件中修改代码如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/157-2.jpg?sign=1739257120-8S7Mb3wutsWEODgtpW7zmdRZl4YdUNM7-0-b23eb4558094bc64f5ce92a84f2c0d48)