在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的步骤。
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>
添加Thymeleaf的Eclipse插件
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-*
创建视图
创建模板
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">