You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringMVC项目部署Tomcat访问根路径返回404错误求解

问题原因分析
  • Tomcat 10 兼容性问题(最高发):Tomcat 10及以上版本基于Jakarta EE 9+规范开发,Servlet API的包名从原有javax.servlet.*调整为jakarta.servlet.*。如果你的Spring MVC版本低于6.x,默认依赖的是旧版javax.servlet.*接口,会导致DispatcherServlet初始化失败,无法处理请求,自然无法完成视图解析跳转。你将JSP放到根目录可以直接访问,是因为根目录下的静态资源/页面不需要经过Spring MVC的DispatcherServlet处理,Tomcat自带的DefaultServlet可以直接返回资源。
  • Spring 上下文加载异常:如果Spring MVC配置文件没有被DispatcherServlet正确加载,或者HomeController没有被组件扫描纳入Spring上下文,会导致根路径请求没有对应的处理器,直接返回404。
  • 视图解析器配置错误:如果InternalResourceViewResolver的前缀路径拼写错误(比如缺前后斜杠、目录名大小写不匹配),会导致Spring MVC拼接出来的视图路径不存在,返回404。
解决方案

方案1:适配Tomcat 10 规范(优先推荐)

  • 升级Spring MVC版本到6.x及以上,该版本已完成Jakarta EE规范适配,默认使用jakarta.servlet.*相关接口。
  • 将项目中所有Java EE相关依赖替换为Jakarta版本,例如把javax.servlet-api替换为jakarta.servlet-api,scope保持provided即可。
  • 更新web.xml头部声明为Jakarta EE对应版本:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
<!-- 保留原有web.xml配置内容 -->
</web-app>

方案2:降级Tomcat版本(临时快速解决)

如果不想调整项目依赖,可直接将Tomcat版本降级到9.x及以下,该版本仍使用旧的javax.servlet.*规范,和低版本Spring MVC天然兼容。

方案3:排查配置正确性

  • 确认Spring MVC配置文件中已开启组件扫描,且包路径覆盖HomeController所在的包,示例配置:
<context:component-scan base-package="替换为你项目Controller所在的包路径"/>
  • 确认DispatcherServlet的初始化参数中正确指定了Spring MVC配置文件位置,示例配置:
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:替换为你的Spring MVC配置文件路径,比如spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  • 检查InternalResourceViewResolver的前缀配置,确保前后斜杠完整,目录名和实际路径完全一致,示例配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view/"/>
    <property name="suffix" value=".jsp"/>
</bean>

内容的提问来源于stack exchange,提问作者Denisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:06:01