1

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

4

2 回答 2

0

经过几个小时的调试我发现,我可以通过设置 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;
  }
}

这为我解决了这个问题。

于 2020-09-01T10:19:00.877 回答
0

春季文档

JSP 限制

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

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

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

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

于 2020-08-31T19:19:36.067 回答