Spring Boot支持FreeMarker、Groovy、Thymeleaf和Mustache四种模板解析引擎,官方推荐使用Thymeleaf。

spring-boot-starter-thymeleaf

在Spring Boot中使用Thymeleaf只需在pom中加入Thymeleaf的starter即可:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

在Spring Boot 1.5.9.RELEASE版本中,默认的Thymeleaf版本为2.1.6.RELEASE版本,这里推荐使用3.0以上版本。在pom中将Thymeleaf的版本修改为3.0.2.RELEASE:

  1. <properties>
  2. <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
  3. <thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
  4. </properties>

在Spring Boot中,默认的html页面地址为src/main/resources/templates,默认的静态资源地址为src/main/resources/static。

Thymeleaf默认配置

在Spring Boot配置文件中可对Thymeleaf的默认配置进行修改:

  1. #开启模板缓存(默认值:true)
  2. spring.thymeleaf.cache=true
  3. #Check that the template exists before rendering it.
  4. spring.thymeleaf.check-template=true
  5. #检查模板位置是否正确(默认值:true)
  6. spring.thymeleaf.check-template-location=true
  7. #Content-Type的值(默认值:text/html)
  8. spring.thymeleaf.content-type=text/html
  9. #开启MVC Thymeleaf视图解析(默认值:true)
  10. spring.thymeleaf.enabled=true
  11. #模板编码
  12. spring.thymeleaf.encoding=UTF-8
  13. #要被排除在解析之外的视图名称列表,用逗号分隔
  14. spring.thymeleaf.excluded-view-names=
  15. #要运用于模板之上的模板模式。另见StandardTemplate-ModeHandlers(默认值:HTML5)
  16. spring.thymeleaf.mode=HTML5
  17. #在构建URL时添加到视图名称前的前缀(默认值:classpath:/templates/)
  18. spring.thymeleaf.prefix=classpath:/templates/
  19. #在构建URL时添加到视图名称后的后缀(默认值:.html)
  20. spring.thymeleaf.suffix=.html
  21. #Thymeleaf模板解析器在解析器链中的顺序。默认情况下,它排第一位。顺序从1开始,只有在定义了额外的TemplateResolver Bean时才需要设置这个属性。
  22. spring.thymeleaf.template-resolver-order=
  23. #可解析的视图名称列表,用逗号分隔
  24. spring.thymeleaf.view-names=

一般开发中将spring.thymeleaf.cache设置为false,其他保持默认值即可。

注意:使用本例时候请不要设置spring.thymeleaf.template-resolver-orderspring.thymeleaf.view-names,不然会出现
Screen Shot 2021-10-10 at 6.14.33 PM.png

简单示例

编写一个简单的Controller:

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping("/account")
  4. public String index(Model m) {
  5. List<Account> list = new ArrayList<Account>();
  6. list.add(new Account("KangKang", "康康", "e10adc3949ba59abbe56e", "超级管理员", "17777777777"));
  7. list.add(new Account("Mike", "麦克", "e10adc3949ba59abbe56e", "管理员", "13444444444"));
  8. list.add(new Account("Jane","简","e10adc3949ba59abbe56e","运维人员","18666666666"));
  9. list.add(new Account("Maria", "玛利亚", "e10adc3949ba59abbe56e", "清算人员", "19999999999"));
  10. m.addAttribute("accountList",list);
  11. return "account";
  12. }
  13. }

编写account.html页面:

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <title>account</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <link rel="stylesheet" th:href="@{/css/style.css}" type="text/css">
  7. </head>
  8. <body>
  9. <table>
  10. <tr>
  11. <th>no</th>
  12. <th>account</th>
  13. <th>name</th>
  14. <th>password</th>
  15. <th>accountType</th>
  16. <th>tel</th>
  17. </tr>
  18. <tr th:each="list,stat : ${accountList}">
  19. <td th:text="${stat.count}"></td>
  20. <td th:text="${list.account}"></td>
  21. <td th:text="${list.name}"></td>
  22. <td th:text="${list.password}"></td>
  23. <td th:text="${list.accountType}"></td>
  24. <td th:text="${list.tel}"></td>
  25. </tr>
  26. </table>
  27. </body>
  28. </html>

最终项目目录如下所示:

Spring Boot中使用thymeleaf - 图2

启动项目,访问http://localhost:8080/web/account:

Spring Boot中使用thymeleaf - 图3