为什么SpringBoot1.5.3JAR不能识别src/main/resources/META-INF/resources中的jsp文件/
我使用了SpringBoot+jsp,我想构建一个可执行的jar,正如前面指出的,只需要将jsp文件放入为什么SpringBoot1.5.3JAR不能识别src/main/resources/META-INF/resources中的jsp文件/,jsp,spring-boot,Jsp,Spring Boot,我使用了SpringBoot+jsp,我想构建一个可执行的jar,正如前面指出的,只需要将jsp文件放入src/main/resources/META-INF/resources/ 幸运的是,Jar项目还有另一个选项:Servlet3.0规范允许在src/main/resources/META-INF/resources/ 但不幸的是,我无法成功访问jsp页面。在尝试了很长一段时间后,我最终决定将spring boot starter web 1.5.3.RELEASE更改为1.4.2.RELE
src/main/resources/META-INF/resources/
幸运的是,Jar项目还有另一个选项:Servlet3.0规范允许在src/main/resources/META-INF/resources/
但不幸的是,我无法成功访问jsp页面。在尝试了很长一段时间后,我最终决定将spring boot starter web 1.5.3.RELEASE更改为1.4.2.RELEASE
,与此演示后一样,这次它可以正常工作
那么为什么sprint boot 1.5.3不支持将jsp文件放入
src/main/resources/META-INF/resources/
?在跟踪源代码之后,我发现了为什么1.5.3无法识别jsp文件
Spring boot 1.4.2
//org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.StoreMergedWebXmlListener#onStart
private void onStart(Context context) {
ServletContext servletContext = context.getServletContext();
if(servletContext.getAttribute("org.apache.tomcat.util.scan.MergedWebXml") == null) {
servletContext.setAttribute("org.apache.tomcat.util.scan.MergedWebXml", this.getEmptyWebXml());
}
TomcatResources.get(context).addClasspathResources(); // only 1.4.2 has this line
}
Spring boot 1.5.3
private void onStart(Context context) {
ServletContext servletContext = context.getServletContext();
if (servletContext.getAttribute(MERGED_WEB_XML) == null) {
servletContext.setAttribute(MERGED_WEB_XML, getEmptyWebXml());
}
}
如何让spring boot 1.5.3也像1.4.2一样工作?以下是我的态度:
1.将TomcatEmbeddedServletContainerFactory的源代码复制到类路径
2.修改onStart
方法
private void onStart(Context context) {
ServletContext servletContext = context.getServletContext();
if (servletContext.getAttribute(MERGED_WEB_XML) == null) {
servletContext.setAttribute(MERGED_WEB_XML, getEmptyWebXml());
}
// add below code
List<URL> list = new ArrayList<>();
String file = "file:/Users/zhugw/workspace/boot-jar-serving-jsp/boot-jar-serving-jsp-1.0-SNAPSHOT.jar!/";
try {
URL jar = new URL("jar", null, file);
list.add(jar);
} catch (MalformedURLException e) {
e.printStackTrace();
}
TomcatResources.get(context).addResourceJars(list);
}
private void onStart(上下文){
ServletContext=context.getServletContext();
if(servletContext.getAttribute(合并的WEB\uxml)==null){
setAttribute(合并的WEB XML,getEmptyWebXml());
}
//添加以下代码
列表=新的ArrayList();
String file=“file:/Users/zhugw/workspace/boot-jar-service-jsp/boot-jar-service-jsp-1.0-SNAPSHOT.jar!/”;
试一试{
URL jar=新URL(“jar”,null,文件);
添加(jar);
}捕获(格式错误){
e、 printStackTrace();
}
TomcatResources.get(上下文).addResourceJars(列表);
}
从spring boot maven插件的1.4.3版开始,不再加载jsp文件。要解决此问题,请使用:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.springframework.boot
需要明确的是,如果您遵循本文,它会告诉您将视图放入src/main/resources/META-INF/resources/*WEB-INF/views*
和设置spring.mvc.view.prefix=/WEB-INF/views/
和spring.mvc.view.suffix=.jsp
。你做到了吗?或者您只是将jsp文件放在src/main/resources/META-INF/resources
中?当然我知道这些。您可以下载演示并修改spring引导版本以证明这是将JSP与嵌入式容器一起使用的一个限制。看见在将应用程序作为war部署到servlet容器时,您所描述的(以及链接到的)是默认设置!