Spring Boot在哪里期望JSP JSP限制

问题描述

我做了this教程,以将旧的jsp应用程序迁移到Spring Boot。但是我没有使用Maven,而是使用gradle。在IntelliJ Idea中,一切正常。 现在,我想为此应用程序制作一个docker容器,因此我使用了臂架gradle插件。但是,当我运行此Docker容器时,出现错误“发生意外错误(类型=未找到,状态= 404)。/WEB-INF / jsp / index.jsp”。实际上,docker容器中缺少/ WEB-INF / jsp目录。所以我通过臂架exTradirectories参数添加了它,但仍然没有找到。那么Spring在哪里寻找这些文件?我必须在哪里存放文件?可以使用属性更改此目录吗?

解决方法

春天doc

JSP限制

在运行使用嵌入式servlet的Spring Boot应用程序时 容器(并打包为可执行存档),其中有一些 JSP支持方面的局限性。

  • 对于Jetty和Tomcat,如果使用战争包装,它应该可以工作。 ...使用可执行jar时不支持JSP。

您也可以在此SO question中获得更多信息。

我查看了您提供的教程链接,发现项目包装为jar,而不是war。可能您需要通过应用Gradle WAR插件将项目转换为war项目。

,

经过数小时的调试,我发现可以通过设置ServletWebServerFactory的文档根目录来设置jsp文件的目录。

@Configuration
public class TomcatConfig {

  @Value("${tomcat.server.document-root}")
  String documentRoot;

  @Bean
  public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    File documentRootFile = new File(documentRoot);
    tomcat.setDocumentRoot(documentRootFile);
    return tomcat;
  }
}

这为我解决了问题。