本文详解spring mvc应用中常见的404错误成因,重点揭示spring framework 6.x与thymeleaf 3.1.x等组件间的版本不兼容问题,并提供基于maven的精准降级方案(如将spring 6.0.5回退至5.3.24),辅以配置验证步骤与调试建议。
本文详解spring mvc应用中常见的404错误成因,重点揭示spring framework 6.x与thymeleaf 3.1.x等组件间的版本不兼容问题,并提供基于maven的精准降级方案(如将spring 6.0.5回退至5.3.24),辅以配置验证步骤与调试建议。
在构建基础Spring MVC“Hello World”应用时,即便web.xml、DispatcherServlet配置、Controller映射、JSP视图解析器及Tomcat部署流程看似无误,仍频繁出现HTTP 404错误——提示“The origin server did not find a current representation for the target resource”,这往往并非路由配置失误,而是更深层的框架版本兼容性断裂所致。
本案例中,开发者使用了Spring Web MVC 6.0.5、Spring Core/Context 6.0.5,并搭配Thymeleaf 3.1.1,最终导致DispatcherServlet初始化失败或视图解析器静默失效:Spring 6.x已全面弃用Java EE(Jakarta EE 9+命名空间迁移)、移除对传统javax.servlet.* API的支持,而Thymeleaf 3.1.x(尤其早期小版本)尚未完全适配Jakarta EE 9+规范(如jakarta.servlet.*)。当Spring MVC尝试加载Thymeleaf视图解析器时,因类加载冲突或SPI机制失效,整个MVC拦截链可能未正确注册,致使请求根本未进入DispatcherServlet,直接由Tomcat容器返回404——此时查看Tomcat日志,常会缺失Initializing Spring DispatcherServlet等关键启动日志。
✅ 根本解决方案:统一降级至Spring 5.3.x LTS生态
Spring 5.3.x(如5.3.24)仍基于javax.servlet.*,与Thymeleaf 3.0–3.1系列、JSP、传统web.xml配置完全兼容,是当前稳定过渡的最佳选择。需在pom.xml中显式声明Spring BOM并覆盖所有相关模块版本:
<properties><spring.version>5.3.24</spring.version></properties><dependencymanagement><dependencies><dependency><groupid>org.springframework</groupid><artifactid>spring-framework-bom</artifactid><version>${spring.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencymanagement><dependencies><!-- 确保全部使用5.3.24 --><dependency><groupid>org.springframework</groupid><artifactid>spring-webmvc</artifactid></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-web</artifactid></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-context</artifactid></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-core</artifactid></dependency><!-- Thymeleaf保持3.1.1即可(与5.3.x兼容) --><dependency><groupid>org.thymeleaf</groupid><artifactid>thymeleaf-spring5</artifactid><version>3.1.1.RELEASE</version></dependency></dependencies>
⚠️ 关键注意事项
- 勿混用Spring 6.x与5.x依赖:Maven依赖传递可能引入冲突版本,务必执行 mvn dependency:tree | grep spring 验证实际解析版本;
- 清理IDE缓存与Tomcat工作目录:IntelliJ/Eclipse需Reload project,Tomcat需删除work/Catalina/localhost/下对应应用目录;
- 验证DispatcherServlet是否启动:启动日志中必须出现类似 Initializing Servlet 'dispatcher' 和 Completed initialization in X ms 的输出;
-
JSP支持需额外确认:若使用JSP而非Thymeleaf,确保web.xml中
为org.springframework.web.servlet.DispatcherServlet,且 (如/)未被其他Filter拦截; - 替代方案(面向未来):若坚持使用Spring 6.x,应切换至Thymeleaf 3.1.2+(已支持Jakarta EE 9)并改用thymeleaf-spring6,同时将web.xml迁移至Java Config(@Configuration + @EnableWebMvc),但此路径对初学者陡峭度显著提升。
总结而言,Spring MVC 404问题在新手项目中,约70%源于版本错配而非逻辑错误。牢记:Spring 5.3.x = Jakarta EE 8(javax.)生态,Spring 6.x = Jakarta EE 9+(jakarta.)生态。选择与你的视图技术(JSP/Thymeleaf)、Servlet容器(Tomcat 9.x仍默认javax.*)及开发成熟度匹配的Spring大版本,是规避此类“幽灵404”的第一道防线。











