如何在同一个 Spring Boot 项目中同时使用 thymeleaf 和 jsp

Pra*_*thu 7 java jsp thymeleaf spring-boot spring-thymeleaf

我可以访问 templates 文件夹下的文件,但无法访问 jsp 文件。如果我删除 thymeleaf 依赖项,我就可以访问 jsp 文件,但我想使用 spring boot 访问 thymeleaf html 文件和 jsp 文件。

以下是我在 application.properties 和 pom.xml 中的配置

Spring 视图解析器设置

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Run Code Online (Sandbox Code Playgroud)
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

下面是错误,当我尝试访问 jsp 文件时

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "todo-form", template might not exist or might not be accessible by any of the configured Template Resolvers spring
Run Code Online (Sandbox Code Playgroud)

我的视图文件夹结构

在此输入图像描述

Pra*_*thu 7

将以下代码放入@configuration类中。我现在可以访问 jsp 和 html 文件。

@Autowired
WebApplicationContext webApplicationContext;

@Bean
public SpringResourceTemplateResolver thymeleafTemplateResolver(){
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setApplicationContext(webApplicationContext);
    templateResolver.setOrder(9);
    templateResolver.setPrefix("/WEB-INF/views/");
    templateResolver.setSuffix("");
    return templateResolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine springTemplateEngine= new SpringTemplateEngine();
    springTemplateEngine.setTemplateResolver(thymeleafTemplateResolver());
    springTemplateEngine.setEnableSpringELCompiler(true);
    return springTemplateEngine;
}

@Bean
public ThymeleafViewResolver thymeleafViewResolver(){
    final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setViewNames(new String[] {"*.html"});
    viewResolver.setExcludedViewNames(new String[] {"*.jsp"});
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setCharacterEncoding("UTF-8");
    return viewResolver;
}

@Bean
public InternalResourceViewResolver jspViewResolver(){
    final InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setOrder(10);
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix("");
    viewResolver.setViewNames("*.jsp");
    return viewResolver;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述