【问题标题】: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;
}
}
这解决了我的问题。