关于springboot 打war包 部署tomcat 无法启动报错的问题

本文介绍了Spring Boot从默认打包成jar改为war包的方式,如在pom添加特定依赖、修改packaging等。还指出将war包部署到Tomcat时易因Spring Boot内置Tomcat版本与实际部署的Tomcat不一致而报错,并说明了查看内置版本的方法,最后提到war包部署访问需加项目名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot 默认是通常是打包成jar的,里面会内置一个tomcat容器
有时候我们需要使用以前打成war包的方式部署到对应的tomcat中,
具体springboot 怎么从jar改成war的打包方式我就不细说了,百度一大把

  • 基本就是pom加一个spring-boot-starter-tomcat 的dependency scope为provided
  • packaging由jar改为war
  • 增加一个类 继承 SpringBootServletInitializer 复写configure 返回application.sources(原先主函数那个类.class);

clean package -Dmaven.test.skip=true 打包后,放到tomcat6 7 8各种报错
很可能出问题的原因是springboot内置tomcat的版本和你实际部署到的tomcat不一致,放到正确的对应版本的tomcat下就解决了
查看springboot 内置tomcat版本的方法
参考 https://www.jb51.net/article/122547.htm
查看pom

<parent> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-parent</artifactId> 
 <version>1.5.6.RELEASE</version> 
</parent>

这块配置就是Spring Boot父级依赖,有了这个,当前的项目就是Spring Boot项目了,
spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,
使用它之后,常用的包依赖可以省去version标签。关于Spring Boot提供了哪些jar包的依赖,
可查看C:\Users\用户.m2\repository\org\springframework\boot\spring-boot-dependencies\1.5.1.RELEASE\spring-boot-dependencies-1.5.1.RELEASE.pom
打开这个pom文件,搜索“tomcat.version” 会找到对应tomcat版本

ps:tomcat 8.0 和tomcat 8.5 还是有区别的 ,本来我一直用8.0.x的版本 ,但是现在springboot的内置版本却是8.5.x的 ,放到8.0是报错的,必须8.5才行……

ps2: war包部署到tomcat的项目访问要加上项目名

### 解决Tomcat部署Spring Boot应用时的404错误 当遇到在Tomcat部署Spring Boot应用程序并收到404错误的情况,可以采取以下几个措施来解决问题。 #### 修改`pom.xml` 为了确保Spring Boot不会使用其默认内嵌的Tomcat服务器而是利用外部配置好的Tomcat实例,在项目的`pom.xml`文件中应调整依赖项设置。具体来说,对于`spring-boot-starter-tomcat`这个组件应该将其作用域设为`provided`,表明该库仅用于编译阶段而不在运行期提供[^3]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` 这样做能够防止打过程中重复引入不必要的资源,并允许Web容器管理自己的Servlet API实现。 #### 更新启动类 为了让Spring Boot应用程序能够在传统的Java EE环境中作为WAR工作,还需要对主程序入口做出相应改动——即让启动类继承自`SpringBootServletInitializer`并且覆盖其中的方法以便正确初始化上下文环境[^4]: ```java @SpringBootApplication public class DemoApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } } ``` 注意这里移除了原有的静态main函数定义,因为当以WAR形式部署至外置Tomcat时并不需要它;不过如果希望保留直接通过命令行执行的能力,则可以选择保持此方法不变。 #### 检查Tomcat与JDK兼容性 另一个可能导致404响应的原因在于所使用的Apache Tomcat版本可能无法很好地支持当前开发工具链中的某些特性或标准。例如,较老版本如6.x系列可能会存在一些局限性,尤其是在搭配现代编程语言特性和框架的情况下。因此建议确认目标Tomcat版本是否匹配正在使用的JDK版本以及Spring Boot的要求[^2]。通常情况下推荐选用最新稳定版的组合以获得更好的性能和支持度。 #### 验证URL路径映射 最后还需仔细核对自己试图访问的具体地址是否确实存在于项目内部路由表里。有时开发者会误以为某个端点已经注册成功但实际上并未如此处理过,从而引发找不到请求资源的现象。可以通过查阅控制器层代码或者借助IDE内置调试功能来进行排查验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值