Spring Boot服务端API访问返回404白标错误页排查求助
解决方案
核心问题说明
当前项目默认采用Spring Boot内置Tomcat的JAR包打包规则,无法直接适配外部Tomcat部署,需调整以下配置:
1. 修改pom.xml配置
首先修改打包方式为WAR,同时排除内置Tomcat依赖:
<!-- 在<version>标签下方添加打包方式配置 --> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>check-in-and-student-portal</name> <!-- 在dependencies节点添加如下依赖,排除内置Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
2. 调整启动类适配外部容器
启动类需要继承SpringBootServletInitializer并重写configure方法,同时可删除冗余注解(@SpringBootApplication已默认包含@EnableAutoConfiguration、@ComponentScan的功能,重复添加可能导致扫包异常):
package com.desola.checkinandstudentportal; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) public class CheckInAndStudentPortalApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(CheckInAndStudentPortalApplication.class); } public static void main(String[] args) { SpringApplication.run(CheckInAndStudentPortalApplication.class, args); } }
3. 验证应用本身可用性
先本地启动项目验证无代码错误:
- 确认本地PostgreSQL服务已启动,
set_tkd数据库已创建,数据库账号密码匹配application.properties配置 - 执行
mvn spring-boot:run启动项目,访问http://localhost:8080/students确认接口可正常返回数据,排除接口本身问题
4. 外部Tomcat部署注意事项
- 必须使用Tomcat 9.x版本,不可使用Tomcat 10+版本:Spring Boot 2.5.0依赖
javax.servlet包,Tomcat 10已切换为jakarta.servlet包,版本不兼容会直接启动失败 - 执行
mvn clean package打包得到WAR包,将其放入Tomcat的webapps目录下启动Tomcat - 访问接口时需要加上WAR包名称作为上下文路径,例如WAR包名为
check-in-and-student-portal-0.0.1-SNAPSHOT.war,则访问地址为http://localhost:8080/check-in-and-student-portal-0.0.1-SNAPSHOT/students;如需直接通过根路径访问,可将WAR包重命名为ROOT.war后再放入webapps目录
内容的提问来源于stack exchange,提问作者Hyperion
相关产品推荐
相关产品推荐

