SpringBoot打war包,并且部署到Tomcat服务器,运行报错404(springboot专属404页面)【完美解决】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yswKnight/article/details/80054284

SpringBoot打war包,并且部署到Tomcat服务器,运行报错404(springboot专属404页面)【完美解决】


参考文档:idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到

修改pom文件

1、packaging由jar变成war

    <groupId>com.wangys</groupId>
    <artifactId>wechatProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

2、剔除springboot本身Tomcat配置

spring boot 本身是内置了tomcat的,但是我们在外面的tomcat部署项目的时候,就必须把springboot本身的tomcat剔除掉,否则会形成冲突!

<scope>provided</scope> 作用

provided表明该包只在编译和测试的时候用!

<!-- 排除内置tomcat容器,导出成war包可以让外部容器运行spring-boot项目-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- provided表明该包只在编译和测试的时候用 -->
    <scope>provided</scope>
</dependency>
<!-- 添加jsp支持 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <!--<scope>provided</scope>-->
    <!-- 如果不注释,你会发现main线程运行报404错误,必须使用 spring-boot:run这个命令运行才行。所以我们注释掉-->
</dependency>

3、将pom文件中的servlet-api.jar包设置为只有在编译和测试的时候用!因为tomcat本身也有servlet-api.jar包,结果会产生冲突!

 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <!-- provided表明该包只在编译和测试的时候用 -->
     <scope>provided</scope>
</dependency>
<dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>jsp-api</artifactId>
     <version>2.2</version>
     <scope>provided</scope>
</dependency>

4、如果有下面这个插件spring-boot-maven-plugin,请将其注释,否则会打包错误!

<build>
     <!-- 修改war包名称 -->
     <finalName>weChatProject</finalName>
    <plugins>
        <!-- 在打jar包时,用来指定主类的插件,打war包将其注释掉 -->
        <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <version>2.0.1.RELEASE</version>
             <configuration>
             <mainClass>${start-class}</mainClass>
             <layout>ZIP</layout>
             </configuration>
             <executions>
                <execution>
                   <goals>
                      <goal>repackage</goal>
                   </goals>
                </execution>
             </executions>
        </plugin>
    </plugins>
</build>

2、继承SpringBootServletInitializer方法

SpringBoot启动类继承SpringBootServletInitializer方法,并重写configure方法

点解:
springboot项目打成war包部署到tomcat时需要改变启动方式,否则运行tomcat时war包只会解压,但是加载不了

@RestController
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication
public class WeChatApplication extends SpringBootServletInitializer{

    @RequestMapping("/hello")
    public String index() {
        return "Hello World";
    }
    /**
     * 需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WeChatApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(WeChatApplication.class, args);
    }
}

3、默认配置下的访问路径(至关重要)

默认配置下,将war包发布到tomcat服务器,需要加war包的名称!!!!
http://localhost:8080/war包名/@RequestMapping.value访问了

猜你喜欢

转载自blog.csdn.net/yswKnight/article/details/80054284
今日推荐