【问题标题】:Where does Spring Boot expect JSPsSpring Boot 期望 JSP 在哪里
【发布时间】:2020-12-19 15:41:25
【问题描述】:

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

【问题讨论】:

    标签: java spring-boot jsp jib


    【解决方案1】:

    春天doc

    JSP 限制

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

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

    您也可以通过SO question 获取更多信息。

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

    【讨论】:

      【解决方案2】:

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

      这解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2016-07-06
        • 2019-01-17
        • 2018-01-16
        • 2023-04-02
        • 2015-05-22
        • 2019-02-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多