如何将IDEA中SpringBoot项目打成war包并部署到Tomcat?
1. 项目pom文件中使用<packing>war</packing>

2. 排除SpringBoot中内置的Tomcat(两种方式)
方式一:排除spring-boot-starter-web中的Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
方式二: 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作-->
<scope>provided</scope>
</dependency>
3. 启动类继承SpringBootServletInitializer实现configure
注意事项: 使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的 server.port= server.servlet.context-path= 将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。 为了防止应用上下文所导致的项目访问资源加载不到的问题, 建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签
<build>
<!-- 应与application.properties(或application.yml)中context-path保持一致 -->
<finalName>war包名称</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4. 通过Maven的clean package进行打包

注意: 在第2步过程中,可能会出现以下错误:

解决方案: 在pom.xml文件中引入以下依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
5. 将打包后生成的war文件放置在Tomcat的webapps目录下
1. 打包生成后的war文件

2. 放置到Tomcat的webapps目录下

6. 通过Tomcat的${Catalina.home}/bin/startup.bat启动项目
1. 启动项目,出现以下字样表示启动成功

2. 项目Controller类中的接口

3. 浏览器访问,localhost:9001/index.do,出现以下界面。 (此时的端口号为Tomcat中启动的端口号,而非之前SpringBoot中启动的端口号)

如何解决这个问题?
在${Catalina.home}/conf/server.xml文件下,添加以下内容:

注意:如果访问接口或者资源文件需要保留项目名称,则可以不需要上一步,只需要在访问时添加项目名称。如:localhost:port/summer-rain/index.do
tomcat灵活配置:
![]()
(docBase:最后的一个反斜杠不能省略,访问localhost:8080/)
![]()
转自:https://blog.csdn.net/qq_33512843/article/details/80951741



浙公网安备 33010602011771号