在Spring Boot中同时使用Thymeleaf和JSP

在使用Spring Boot构建Web应用程序时,理想情况下应使用Thymeleaf作为视图。但是,对于之前使用JSP的旧项目或者无法一次性将所有页面转换为Thymeleaf的情况,我们可以介绍一种同时使用JSP和Thymeleaf的方法。

开发环境

    • Spring Tools Suite (STS) 4

 

    • JDK 8

 

    Spring Boot 2.7.7

前提 tí)

如何在Spring Boot项目中使用Thymeleaf与已经使用JSP的Web应用程序共存的步骤。
因此,此处不包含在Spring Boot项目中使用JSP的步骤。

如果是在不使用JSP的现有项目中,故意与JSP同时使用没有什么好处。

Maven的依赖关系配置

在pom.xml文件中添加Thymeleaf的依赖关系。

    • spring-boot-starter-thymeleaf

 

    spring-boot-devtools
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
使用spring-boot-devtools可以在调试时即时反映源代码的更改。

添加Thymeleaf的Eclipse插件

https://github.com/thymeleaf/thymeleaf-extras-eclipse-plugin

Thymeleaf视图解析器定义

如果只使用Thymeleaf而不使用JSP,那么在MVC的Config类中不需要添加以下的Bean定义,但如果同时使用JSP,则需要添加。
关于要设置到解析器中的值,将使用在application.properties中指定的spring.thymeleaf.*的值(未设置的项目将使用默认值)。
通过将ThymeleafViewResolver的setOrder设置为1,可以提高其优先级,使其比JSP的解析器更优先。

    • SpringResourceTemplateResolver

 

    • SpringTemplateEngine

 

    ThymeleafViewResolver

	@Autowired
	private ThymeleafProperties thProperties;

 省略 

	@Bean
	public SpringResourceTemplateResolver templateResolver(){
		SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
		templateResolver.setPrefix(thProperties.getPrefix());
		templateResolver.setSuffix(thProperties.getSuffix());
		templateResolver.setCacheable(thProperties.isCache());
		templateResolver.setTemplateMode(thProperties.getMode());
		return templateResolver;
	}

	@Bean
	public SpringTemplateEngine templateEngine(){
		SpringTemplateEngine templateEngine = new SpringTemplateEngine();
		templateEngine.setTemplateResolver(templateResolver());
		templateEngine.setEnableSpringELCompiler(thProperties.isEnableSpringElCompiler());
		return templateEngine;
	}

	@Bean
	public ThymeleafViewResolver viewResolver(){
		ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
		viewResolver.setOrder(1);
		viewResolver.setTemplateEngine(templateEngine());
		viewResolver.setCharacterEncoding(thProperties.getEncoding().name());
		viewResolver.setViewNames(thProperties.getViewNames());
		return viewResolver;
	}


JSP视图解析器的定义

在用于MVC配置的Config类中,为JSP定义的ViewResolverRegistry指定order为2,以降低其优先级比Thymeleaf低。
通过这样做,Thymeleaf解析器将会先处理viewNames匹配的视图,而其余视图将使用JSP。

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/views/", ".jsp");
		registry.order(2);
	}

在application.properties文件中添加设置。

我要添加一个Thymeleaf的配置。

    • cache

 

    • デバッグ時はfalseを指定します。これによりtemplateの変更内容が再起動しなくても反映されます。

 

    • view-names

 

    Thymeleafを使用するViewの名前をカンマ区切りで指定します。ワイルドカードでパターン指定も可能です。
spring.thymeleaf.cache=false
spring.thymeleaf.view-names=xxxx,yyyy,*th-*
请在除了调试时之外的时候,将缓存设置为true。

创建视图

创建模板

Spring Boot使用Thymeleaf模板的默认位置是/src/main/resources/templates。
在这个目录下创建模板的HTML文件。
有关Thymeleaf的详细信息,请参考参考文献。

 

参考静态资源

静态资源的默认位置是/src/main/resources/static,但是在与JSP一起使用时,我们将参考已经在/src/main/webapp/resources中配置的静态资源。路径指定如下:

<link th:href="@{/resources/css/xxxx.min.css}" rel="stylesheet">
广告
将在 10 秒后关闭
bannerAds