Spring Boot打包war部署到Tomcat后接口端点无法访问问题求助
Spring Boot部署Tomcat返回404问题解决方案
1. 检查Gradle打包配置正确性
- 首先确认
build.gradle中已经排除Spring Boot内置Tomcat依赖,避免和外部Tomcat容器冲突:dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 必须添加该配置,声明使用外部Tomcat容器 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' } - 确认war包名称和访问的上下文路径一致:如果生成的war包名称是
spring-boot-example-0.0.1-SNAPSHOT.war,对应访问路径应为http://host:8080/spring-boot-example-0.0.1-SNAPSHOT/hello-world;如果需要自定义上下文路径,可直接将war包重命名为预期的上下文名称(如spring-boot-example.war)后再上传部署。
2. 检查Spring Boot项目配置
- 确认
application.properties/application.yml中没有配置server.servlet.context-path参数,外部Tomcat部署时会忽略Spring Boot自带的上下文路径配置,完全以war包名称或Tomcat站点配置的上下文路径为准。 - 确认
ExampleController类所在包是主启动类ExampleApplication的同级包或子包,Spring Boot默认仅扫描主启动类所在包及其子包下的组件,如果Controller存放在其他路径,需要手动添加@ComponentScan注解指定扫描路径。
3. 排查Tomcat运行日志
- 进入Tomcat安装目录的
logs文件夹,查看catalina.out和localhost.日期.log日志,检查应用部署过程中是否存在异常抛出。即使Tomcat管理页面显示应用运行正常,也可能存在Spring容器启动失败、接口未注册的情况。 - 如果日志出现类不存在相关报错,大概率是依赖打包不全,必须使用
./gradlew bootWar命令打包,普通./gradlew war命令不会将第三方依赖打入war包,会导致启动失败。
4. 验证部署包有效性
- 可先将生成的war包放到本地的Tomcat 9的
webapps目录下,启动本地Tomcat访问对应路径验证包本身是否可用。如果本地也无法访问,说明是打包环节的问题;如果本地可以正常访问,说明是服务器Tomcat的配置问题,可检查服务器Tomcat的权限配置、webapps目录读写权限是否正常。
内容的提问来源于stack exchange,提问作者Apri
相关产品推荐
相关产品推荐

