问题描述
我做了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;
}
}
这为我解决了问题。