Spring Boot直接访问JSP:IDE正常,WAR包部署Tomcat报404
部署外部Tomcat出现404的原因分析
JSP文件路径不符合外部Tomcat规范
Spring Boot内嵌Tomcat兼容灵活的资源位置,但外部Tomcat严格遵循Servlet规范,要求JSP文件必须放在src/main/webapp目录下。如果你的项目没有这个目录,或者打包时该目录未被Maven WAR插件正确包含,外部Tomcat就找不到employeeView.jsp文件。上下文路径未适配外部Tomcat
内嵌Tomcat默认上下文路径为/,所以直接访问/employeeView.jsp有效。但部署到外部Tomcat后,上下文路径自动变为WAR包名称(即NAME_OF_WAR)。如果你的视图解析器前缀硬编码为固定路径(比如/WEB-INF/jsp/),或者控制器跳转路径没有动态适配上下文,就会导致请求路径和实际资源路径不匹配,触发404。WAR包打包不规范
- 启动类未继承
SpringBootServletInitializer:Spring Boot项目部署到外部Tomcat必须让启动类继承该类并重写configure方法,否则Tomcat无法正确加载Spring Boot应用上下文。代码示例:
public class YourApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } }
pom.xml配置问题:确保打包类型设置为war,并将内嵌Tomcat依赖设为provided避免冲突:
<packaging>war</packaging> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> </dependencies>
- 资源打包遗漏:检查
mvn package生成的WAR包,确认employeeView.jsp是否在webapp目录下,避免因Maven配置错误导致资源未被打包。
- JSP依赖与外部Tomcat版本不兼容
如果项目中JSP相关依赖(如JSTL)的版本与外部Tomcat内置的Servlet/JSP API版本冲突,会导致Tomcat无法解析JSP文件,返回404错误。需确保依赖版本与Tomcat版本匹配(比如Tomcat 9对应Servlet 4.0、JSP 2.3版本)。
内容的提问来源于stack exchange,提问作者Shoaeb
相关产品推荐
相关产品推荐

