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