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

Spring MVC访问/add接口出现HTTP 404错误,请求排查解决方案

Spring MVC访问/add出现404错误排查

问题详情

访问URL http://localhost:8080/DemoMVC/add?t1=2&t2=4 时返回HTTP 404错误,服务器无法找到请求资源。该URL应匹配Spring控制器中的/add映射,但Spring未识别到该映射。

已尝试的操作

  • 创建了带有@RequestMapping("/add")注解的控制器,用于处理/add请求;
  • 确认控制器在Spring的@ComponentScan扫描包范围内;
  • 控制器方法已实现处理参数t1、t2并返回结果的逻辑;
  • 验证了Spring DispatcherServlet的web.xml配置及视图解析相关配置。

代码文件

display.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here </title>
</head>
<body>
RESULT IS:<%= request.getAttribute("result")%>
</body>
</html>

index.jsp

<html>
<body>
<h2>Hello World!</h2>
<form action="add">
<input type="text" name="t1"><br>
<input type="text" name="t2"><br>
<input type="submit">
</form>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <display-name>DemoMVC</display-name>

  <servlet>
    <servlet-name>student</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>student</servlet-name>
    <url-pattern>/add</url-pattern>
  </servlet-mapping>

</web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.student</groupId>
  <artifactId>DemoMVC</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>DemoMVC Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version> <!-- Or 3.1.0 or 2.5 based on your server -->
    <scope>provided</scope>
</dependency>
 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>



  </dependencies>
  <build>
    <finalName>DemoMVC</finalName>
  </build>
</project>

AddController.java

package com.student;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class AddController {
    
    @RequestMapping("/add")
    public ModelAndView add(HttpServletRequest req, HttpServletResponse res) {
        int i=Integer.parseInt(req.getParameter("t1"));
        int j=Integer.parseInt(req.getParameter("t2"));
        int k=i+j;
        
        ModelAndView mv= new ModelAndView();
        mv.setViewName("display.jsp");
        mv.addObject("result", k);
         
        return mv;
    }

}

student-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:ctx="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
    
    
    <ctx:annotation-config></ctx:annotation-config>
    <ctx:component-scan base-package="com.student"></ctx:component-scan>
    
    
</beans>

问题根源及修复方案

1. DispatcherServlet映射范围错误

当前web.xml中DispatcherServlet的url-pattern仅配置为/add,导致只有/add路径会被DispatcherServlet接管,但Spring控制器内部的@RequestMapping("/add")会匹配相对于DispatcherServlet的路径,最终实际匹配路径变为/add/add,因此出现404。

修复:修改web.xml中的servlet-mapping,让DispatcherServlet处理所有请求:

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

2. 缺少视图解析器配置

student-servlet.xml中未配置视图解析器,控制器返回的display.jsp无法被Spring正确解析路径。

修复:在student-servlet.xml中添加InternalResourceViewResolver:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/> <!-- 根据JSP实际存放路径调整 -->
    <property name="suffix" value=".jsp"/>
</bean>

同时将display.jsp移动到WEB-INF/views/目录下,修改控制器中的视图名称为display:

mv.setViewName("display");

3. 可选优化:简化控制器参数获取

可以使用@RequestParam替代HttpServletRequest获取参数,代码更简洁:

@RequestMapping("/add")
public ModelAndView add(@RequestParam("t1") int t1, @RequestParam("t2") int t2) {
    int k = t1 + t2;
    ModelAndView mv = new ModelAndView("display");
    mv.addObject("result", k);
    return mv;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:39:55