How to use Thymeleaf with Spring Boot

Thymeleaf是一种流行的服务器端模板引擎,适用于 Web 和独立 Java 应用程序。

它被开发用于处理不同类型的文件,如 HTML、XML、JavaScript、CSS 和纯文本。

使用 Thymeleaf 的最大优势是它为您的开发工作流程带来了自然模板——HTML模板可以直接在浏览器中打开并仍然正确呈现为网页。这为快速开发静态原型提供了极大的灵活性,而无需在创建后端服务器上浪费时间。

与其他著名的模板引擎(如 JavaServer Pages (JSP))相比,Thymeleaf 使整个开发过程变得非常简单和快速。在本文中,您将学习如何将 Thymeleaf 模板引擎与 Spring Boot 结合使用来提供动态 Web 内容。

依赖关系

Spring Boot 对 Thymeleaf 模板引擎提供了极好的支持,使得整个集成过程非常简单明了。您需要做的只是将Thymeleaf 的Spring Boot starter包含到您的应用程序依赖项中。Spring Boot 将自动配置您使用 Thymeleaf 引擎所需的一切。要激活 Spring Boot Web 支持,请确保同时包含 Spring Boot Web starter 依赖项 ( spring-boot-starter-web)。

对于 Gradle 项目,将以下依赖项包含到您的build.gradle文件中:

1
2
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'

对于 Maven,将以下依赖项添加到pom.xml文件中:

1
2
3
4
5
6
7
8
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

如果您是从头开始,只需使用Spring Initializr Web 工具或Spring Boot CLI即可使用上述依赖项快速引导一个新的 Spring Boot 项目。

模板

Thymeleaf 模板只是HTML 静态文件(.html扩展名),可在浏览器和 Web 应用程序中使用。默认情况下,这些模板存储在src/main/resources/templates/文件夹中。Spring Boot 会在需要时自动选择并呈现这些 HTML 文件。

让我们创建我们的第一个 Thymeleaf 模板index.html,并将其放入src/main/resources/templates文件夹中:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Spring Boot Thymeleaf Web Application</title>
</head>
<body>
<h1>Welcome to Spring Boot Thymeleaf</h1>
<p>
Hey there! <th:block th:text="${message}">message</th:block>
</p>
</body>
</html>

Thymeleaf 引擎将解析上述index.html文件,评估th:text表达式并替换${message}为 Spring Boot Web 控制器类提供的实际值。

Spring Boot 控制器

现在让我们定义一个名为 Spring Boot 控制器类IndexController.java,它处理端点上的所有 HTTP GET请求/并返回需要作为响应呈现的视图的名称:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.attacomsian.getstarted.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

@GetMapping("/")
public String index(Model model) {

// add `message` attribute
model.addAttribute("message", "Thank you for visiting.");

// return view name
return "index";
}
}

正如你在上面看到的,我们定义了一个简单的 Spring 控制器,它只接受端点上的GET请求/。所述@Controller注释指示注解的类是“控制器”(例如一个网络控制器)。

该@GetMapping注释被用于映射HTTP GET请求到特定的控制器的方法。在上面的例子中,它将/端点映射到index()方法上。Model是一个特殊的接口,用于在 Spring Boot 中的控制器和视图之间共享数据。我们已将message属性添加到Model视图模板中所需的对象 —index.html文件。

该index()方法以字符串形式返回视图模板的名称。Thymeleaf 将在默认文件夹 ( src/main/resources/templates/) 中搜索此模板并进行渲染。

运行和测试应用程序

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.attacomsian.getstarted;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

应用程序启动后,在 Web 浏览器中打开http://localhost:8080/以查看输出。这是它的样子:
img.png

更改 Thymeleaf 默认属性

Spring Boot 为 Thymeleaf 模板引擎提供了默认配置。要覆盖默认属性值,您可以在application.properties或application.yml配置文件中定义属性。

更改模板文件夹位置

要更改 HTML 模板的默认文件夹位置,您需要覆盖以下属性:

1
2
# change location from `templates` to `views`
spring.thymeleaf.prefix=classpath:/views/

禁用模板缓存

默认情况下,Spring Boot 会缓存 Thymeleaf 模板以提高性能。如果您希望模板在修改时自动更新,请覆盖以下属性(不推荐在生产中使用):

1
2
spring.thymeleaf.cache=false

参考文章

评论