5.1 Thymeleaf 简介

Thymeleaf 是一个现代的服务器端 Java 模板引擎,专为 Web 和独立环境设计。它的主要目标是提供一种简单而强大的方式来生成 HTML、XML、JavaScript、CSS 和纯文本等内容。Thymeleaf 的设计理念是使模板在浏览器中可直接查看和编辑,这使得前端开发人员能够更容易地与后端开发人员协作。

1. Thymeleaf 的特点

1.1 自然模板

Thymeleaf 的一个显著特点是“自然模板”。这意味着你可以在浏览器中直接打开 Thymeleaf 模板文件(如 .html 文件),并且它们会以有效的 HTML 格式呈现。这样,前端开发人员可以在不依赖于后端的情况下查看和编辑模板。

1.2 表达式语言

Thymeleaf 提供了一种强大的表达式语言(Standard Expression Language, SEL),允许开发者在模板中轻松访问和操作 Java 对象的属性。常用的表达式包括:

  • ${}:用于访问变量
  • *{}:用于访问当前上下文中的对象
  • #{}:用于国际化(i18n)

1.3 支持多种模板类型

Thymeleaf 不仅支持 HTML 模板,还支持 XML、JavaScript、CSS 和纯文本等多种格式。这使得它在多种场景下都能发挥作用。

1.4 集成 Spring

Thymeleaf 与 Spring 框架的集成非常紧密,特别是 Spring MVC。它可以轻松地与 Spring 的控制器、模型和视图结合使用。

2. Thymeleaf 的优缺点

2.1 优点

  • 自然模板:前端开发人员可以直接查看和编辑模板,减少了沟通成本。
  • 强大的表达式语言:提供了丰富的表达式支持,简化了数据绑定和条件渲染。
  • 灵活性:支持多种模板类型,适用于不同的需求。
  • 与 Spring 的无缝集成:与 Spring MVC 的集成非常简单,能够快速构建 Web 应用。

2.2 缺点

  • 学习曲线:对于初学者来说,Thymeleaf 的语法和特性可能需要一定的学习时间。
  • 性能问题:在高并发场景下,Thymeleaf 的性能可能不如一些客户端渲染的框架(如 React 或 Vue.js)。
  • 依赖于服务器:Thymeleaf 是一个服务器端模板引擎,可能不适合需要高度交互的单页应用(SPA)。

3. Thymeleaf 的基本用法

3.1 Maven 依赖

在使用 Thymeleaf 之前,首先需要在 pom.xml 中添加相关依赖:

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

3.2 创建控制器

接下来,我们需要创建一个简单的 Spring MVC 控制器来处理请求并返回视图。

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

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "World");
        return "hello"; // 返回视图名称
    }
}

3.3 创建 Thymeleaf 模板

src/main/resources/templates 目录下创建一个名为 hello.html 的文件,内容如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello Thymeleaf</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name} + '!'">Hello, World!</h1>
</body>
</html>

3.4 运行应用

启动 Spring Boot 应用后,访问 http://localhost:8080/hello,你应该能看到页面显示“Hello, World!”。

4. Thymeleaf 的常用功能

4.1 条件渲染

Thymeleaf 支持条件渲染,可以根据条件显示或隐藏某些元素。例如:

<div th:if="${name != null}">
    <p th:text="'Hello, ' + ${name} + '!'">Hello, Guest!</p>
</div>

4.2 循环渲染

Thymeleaf 还支持循环渲染,可以遍历集合并生成相应的 HTML 元素。例如:

@GetMapping("/users")
public String users(Model model) {
    List<String> userList = Arrays.asList("Alice", "Bob", "Charlie");
    model.addAttribute("users", userList);
    return "users";
}
<ul>
    <li th:each="user : ${users}" th:text="${user}"></li>
</ul>

4.3 国际化支持

Thymeleaf 提供了国际化支持,可以根据用户的语言环境显示不同的文本。首先,在 src/main/resources/messages.properties 中定义消息:

greeting=Hello, {0}!

然后在模板中使用:

<p th:text="#{greeting(${name})}">Hello!</p>

5. 注意事项

  • 模板文件位置:确保 Thymeleaf 模板文件放在 src/main/resources/templates 目录下。
  • 表达式语言:熟悉 Thymeleaf 的表达式语言,以便更高效地使用模板。
  • 性能优化:在高并发场景下,考虑使用缓存和其他性能优化手段。
  • 安全性:注意防止 XSS 攻击,Thymeleaf 默认会对输出进行 HTML 转义。

6. 总结

Thymeleaf 是一个功能强大的 Java 模板引擎,适合与 Spring Boot 应用集成。它的自然模板特性使得前后端开发人员能够更好地协作,而强大的表达式语言和灵活的功能则使得开发过程更加高效。尽管存在一些缺点,但在许多场景下,Thymeleaf 仍然是一个非常优秀的选择。通过本教程的学习,你应该能够掌握 Thymeleaf 的基本用法,并在实际项目中灵活运用。