springboot系列(3):各种运行方式遇到的坑 Whitelabel Error Page

在开发springboot过程中大部分都是直接run一下主函数就可以了,可是,当整合jsp时创建了webapp文件夹时,失效了报错Whitelabel Error Page
这里写图片描述

猜测

应该是资源路径问题,或者springboot的启动方式加载的资源不对

具体实践

  • 启动方式1
    通过maven插件方式启动。spring-boot:runmaven命令启动。
    这里写图片描述
    能正常访问。
  • 启动方式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。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值