Spring Boot Thymeleaf 配置
最后修改于 2023 年 7 月 29 日
在本文中,我们将展示如何使用 Spring Boot Web 应用程序配置 Thymeleaf。当 Spring Boot 在 Gradle 构建文件中找到 Thymeleaf 依赖项时,它会自动配置 Thymeleaf 模板引擎。本教程展示了如何使用 Java 配置手动完成此操作。
Spring 是一个流行的 Java 应用程序框架。Spring Boot 旨在以最小的努力创建独立的、生产级的基于 Spring 的应用程序。
Thymeleaf
Thymeleaf 是一个现代的服务器端 Java 模板引擎,适用于 Web 和独立环境。它基于自然模板的概念构建:模板文件可以直接在浏览器中打开,并且仍然可以正确显示为网页。
Spring Boot Thymeleaf 配置示例
以下示例使用 Java 配置来设置 Spring Boot 的 Thymeleaf。
build.gradle
...
src
├───main
│ ├───java
│ │ └───com
│ │ └───zetcode
│ │ │ Application.java
│ │ └───config
│ │ WebConfig.java
│ └───resources
│ └───mytemplates
│ index.html
└───test
└───java
这是项目结构。 Thymeleaf 模板文件位于自定义的 src/main/resources/mytemplates 目录中。 默认的模板目录是 src/main/resources/templates。
plugins {
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.zetcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
这是构建文件。 spring-boot-starter-thymeleaf 是一个用于构建带有 Thymeleaf 的 Spring MVC 应用程序的启动器。 spring-boot-starter-web 是一个用于 Web 应用程序的启动器。
package com.zetcode.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver templateResolver() {
var templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("mytemplates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
var templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
var viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
}
在 WebConfig 中,我们配置 Thymeleaf 并为首页设置视图和控制器。 模板引擎在 Java 代码中配置。
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver templateResolver() {
此 bean 定义了一个模板解析器。 模板解析器将模板解析为 TemplateResolution 对象,其中包含其他信息,例如模板模式、缓存、模板的前缀和后缀。 ClassLoaderTemplateResolver 用于加载位于类路径上的模板。
templateResolver.setPrefix("mytemplates/");
我们将模板目录设置为 mytemplates。 使用 ClassLoaderTemplateResolver 时,前缀中没有 classpath:。
templateResolver.setTemplateMode("HTML5");
模板引擎将提供 HTML5 内容。
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
var templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
创建了一个具有 Spring 集成的 Thymeleaf 模板引擎。
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
var viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
在这里,我们配置一个 bean,它创建一个 ThymeleafViewResolver。 视图解析器负责为特定操作和区域设置获取 View 对象。 然后,视图对象将呈现为 HTML 文件。
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
在这个简单的应用程序中,我们没有特定的控制器类。 我们使用 addViewController 方法定义一个自动控制器。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home page</title>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<p>
<span th:text="'Today is: ' + ${#dates.format(#dates.createNow(), 'dd MMM yyyy HH:mm')}" th:remove="tag"></span>
</p>
</body>
</html>
这是一个 Thymeleaf 模板文件。 它显示当前日期。
package com.zetcode;
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);
}
}
此代码设置 Spring Boot 应用程序。 @SpringBootApplication 启用自动配置和组件扫描。
$ ./gradlew bootRun
我们启动应用程序。
$ curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Home page</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>
Today is: 21 Jul 2023 17:08
</p>
</body>
</html>
在本文中,我们使用 Thymeleaf 模板引擎创建了一个 Spring Boot Web 应用程序。 我们展示了如何配置 Thymeleaf。