Spring MVC 5部署Tomcat 10访问路径返回404资源不可用问题求助
问题根因分析
- 核心不兼容问题:Tomcat 10及更高版本基于Jakarta EE 9+规范实现,Servlet API的包名已经从
javax.servlet.*全部调整为jakarta.servlet.*,但你当前使用的Spring 5.x、javax.servlet-api 4.0.1依赖都是基于旧的javax规范开发的,完全无法在Tomcat 10环境下运行,这是访问提示资源不可用的核心原因。 - 路径匹配问题:如果Tomcat部署时没有手动修改应用的上下文根,当前项目artifactId为
university,默认的访问路径应该是http://localhost:8080/university/,但受上面的兼容问题影响,不管用哪个路径都无法正常访问。
解决方案
方案一(改动最小,优先推荐)
直接将Tomcat版本降级到9.x,Tomcat 9是最后一个支持javax.servlet规范的官方稳定版本,完全适配你当前的所有依赖版本,不需要修改任何代码和pom配置,部署后即可正常访问。
方案二(适配Tomcat 10)
如果必须使用Tomcat 10,需要对项目做如下调整:
- 将Spring全家桶版本升级到6.x,Spring从6.0版本才开始支持Jakarta EE规范
- 将pom中的
javax.servlet-api依赖替换为jakarta.servlet-api,版本选择5.0及以上 - 全局替换项目中所有
import javax.servlet.*的导入语句为import jakarta.servlet.* - 升级Thymeleaf版本到3.1.x及以上,匹配Spring 6的版本要求
其他检查项
调整版本后可以检查以下配置:
- 确认Tomcat的应用上下文根配置,如果设置为
/就直接访问http://localhost:8080/,如果使用默认值就访问http://localhost:8080/university/ - 确认
/WEB-INF/html/目录下存在index.html文件,文件没有访问权限限制
内容的提问来源于stack exchange,提问作者Parazit-nsk
相关产品推荐
相关产品推荐

