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

Spring MVC使用@RequestMapping注解出现HTTP 404错误如何解决?

问题排查及解决方案

根因梳理

  • 核心兼容性问题:你使用的Tomcat 10属于Jakarta EE技术栈,全部Servlet包从javax.servlet.*重命名为jakarta.servlet.*,而Spring MVC 4完全基于Java EE的javax.servlet.*开发,两者不兼容,请求无法被Spring MVC正常拦截处理,这是出现404的最主要原因。
  • 配置重复:todo-servlet.xml中重复声明了两次<mvc:annotation-driven/>,可能导致MVC注解配置冲突。
  • 缺少视图解析器配置:Spring MVC没有配置视图解析器,无法正确映射Controller返回的视图名到实际的jsp文件。
  • web.xml版本过低:当前使用的web.xml 2.3版本过于老旧,无法适配Spring MVC 4的最低运行要求。
  • 路径适配问题:表单提交路径未添加项目上下文根,若项目部署时带自定义上下文路径,会出现请求地址不匹配。

具体修复步骤

  1. 解决版本兼容性问题
    二选一即可:
  • 方案1:将Tomcat版本降级到9.x及以下版本,Tomcat 9仍使用javax.servlet.*包,可直接兼容Spring MVC 4
  • 方案2:若需保留Tomcat 10,将Spring MVC版本升级到6.x及以上,适配Jakarta EE规范
  1. 修正todo-servlet.xml配置
    删除重复的<mvc:annotation-driven/>,新增视图解析器配置,修改后完整配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.telusko"></context:component-scan>
    
    <mvc:annotation-driven enable-matrix-variables="true"/>
    
    <!-- 新增视图解析器,prefix根据你的jsp存放位置调整,以下示例为jsp放在webapp根目录 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
  1. 修改AddController.java返回值
    视图解析器已配置后缀,无需再写.jsp后缀:
package com.telusko;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class AddController {
    @RequestMapping("/add")
    public String add() {
        return "display";
    }
}
  1. 升级web.xml版本并优化配置
    替换原有web.xml的头部和内容,使用3.0以上版本,添加servlet启动加载配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>todo</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>todo</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
  1. 修正表单提交路径
    修改index.jsp的form的action属性,添加上下文根适配:
<html>
<body>
<form action="${pageContext.request.contextPath}/add">
    <input type="text" name="t1"></br>
    <input type="text" name="t2"></br>
    <input type="submit">
</form>
</body>
</html>
  1. 检查display.jsp文件是否存在,确保放在webapp根目录下(和index.jsp同层级)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:18:00