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。