根据 Maven 文档src/main/resources,最终会出现在WEB-INF/classesWAR 中。

这在您的 Spring Boot 中起到了作用application.properties

spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp

如果您更喜欢 Java 配置,可以使用以下方法:

@EnableWebMvc
@Configuration
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver jspViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setPrefix("/WEB-INF/classes/templates/");
        bean.setSuffix(".jsp");
        return bean;
    }
}

更新一个完整的例子

此示例基于 Spring 的初始化程序(具有“Web”依赖项的 Gradle 项目)。我刚刚添加apply plugin: 'war'build.gradle,添加/更改了下面的文件,构建了项目gradle war并将其部署到我的应用程序服务器(Tomcat 8)。

这是此示例项目的目录树:

\---src
    +---main
        +---java
        |   \---com
        |       \---example
        |           \---demo
        |                   ApplicationConfiguration.java
        |                   DemoApplication.java
        |                   DemoController.java
        |
        \---resources
            +---static
            \---templates
                    index.jsp

ApplicationConfiguration.java:见上文

DemoApplication.java:

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(DemoApplication.class, args);
    }

}

DemoController.java:

@Controller
public class DemoController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

index.jsp:

<html>
    <body>
        <h1>Hello World</h1>
    </body>
</html>

官方资料:

资源处理:

由于 ResourceUrlEncodingFilter 为 Thymeleaf 和 FreeMarker 自动配置,资源链接在运行时在模板中重写。您应该在使用 JSP 时手动声明此过滤器。来源

支持的模板引擎

除了REST Web服务,您还可以使用 Spring MVC 来提供动态 HTML 内容。Spring MVC 支持多种模板技术,包括 Thymeleaf、FreeMarker 和 JSP。

[...]

如果可能,应避免使用 JSP,将它们与嵌入式 servlet 容器一起使用时有几个已知的限制。

[..]

当您使用默认配置的这些模板引擎之一时,您的模板将自动从 src/main/resources/templates 中获取。

来源

Spring Boot JSP 限制

  • 使用 Tomcat,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到标准
    容器(不限于,但包括 Tomcat)。
  • 由于 Tomcat 中的硬编码文件模式,可执行 jar 将无法工作。
  • 使用 Jetty,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且也可以部署到任何标准容器。
  • Undertow 不支持 JSP。
  • 创建自定义 error.jsp 页面不会覆盖错误处理的默认视图,应改为使用自定义错误页面。

来源

技术变化

告诉 spring boot 从哪里加载JSP files. 在application.properties集合

spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp

来源

使用 JSP 的示例 Spring Boot

如果您确实想JSP与 spring boot 一起使用,这里有两个示例:

https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-web-jsp

https://github.com/joakime/spring-boot-jsp-demo

总而言之,到目前为止,没有一个建议的答案对我有用。使用一个空白的 Spring Boot 启动项目。

不知何故,某些东西在 Spring 或 servlet 中看起来是硬连线的,因此 JSP必须位于/webapp(或子文件夹)中。与在/resources/templates.

我尝试了各种更改,实际上是很多不同的配置,但无法修改该行为。它只是产生了复杂性,无法再为 JSP 提供服务。所以,最重要的是,如果您使用 JSP,只需将它们放入/webapp. 它还可以通过使用以下控制器添加零配置来工作:

@GetMapping("/foo") public String serveFoo() { return "relative-path-inside-webapp/foo.jsp"; }

另一方面,默认情况下,该/webapp文件夹也将隐藏在 Spring 工具套件中,因此您必须手动将其配置为“源文件夹”。