在开发springboot过程中大部分都是直接run一下主函数就可以了,可是,当整合jsp时创建了webapp文件夹时,失效了报错Whitelabel Error Page
猜测
应该是资源路径问题,或者springboot的启动方式加载的资源不对
具体实践
- 启动方式1
通过maven插件方式启动。spring-boot:run
maven命令启动。
能正常访问。 - 启动方式2
直接启动主函数,测试结果,如果你项目是 一个子模块,访问不了。如果你项目是个project可以访问。
或者直接设置子模块的工作路径。
选中自己的主函数,设置路径是子模块路径。猜想默认路径应该都是project路径导致404. - 启动方式3
jar包方式 java -jar xxx.jar,结果还是不行。原因:打包里面根本没有jsp页面。要在pom.xml里面配置复制一下打包的资源内容。
finalName标签指定了打包完成后包的名字。同时spring-boot-maven-plugin的版本一定要是1.4.2.RELEASE,其他很多都不行。那位老铁试试可以的可以@我一下。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--其他版本的报bug-->
<version>1.4.2.RELEASE</version>
</plugin>
</plugins>
<finalName>spring-boot</finalName>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>${basedir}/src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<!--关闭过滤-->
<filtering>false</filtering>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
启动方式4:
打war包,放tomcat下即可。
修改<packaging>war</packaging>
,排除一下spring-boot-starter-web的tomcat依赖。同时增加一下servlet-api的依赖,tomcat8就不用加这个了,它自带了。
dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
同时修改一下application.properties里面的发布路径
#打war发布路径
#server.context-path=/spring-boot
#server.port= 8080
重写一下主函数
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
放到tomcat webapp下面启动tomcat,页面访问http://localhost:8080/spring-boot/jsp,成功ok。