Spring MVC项目点击链接出现HTTP Status 404错误,求排查指导
问题概述
开发Spring MVC项目时,配置了简单控制器及两个请求映射用于跳转JSP页面,但点击index.jsp中的链接时出现HTTP Status 404错误,请求URL为http://localhost:8080/spring_MVC_project/firstAdd。已检查拼写、大小写及JSP文件位置等常见问题,仍未定位原因。
项目结构
- index.jsp:位于Web应用根目录
- add.jsp、addFinal.jsp:位于项目
/WEB-INF/jsp/目录下
代码详情
控制器代码(addController.java)
package com.mvc; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class addController { @RequestMapping("/firstAdd") public String add(){ return "add.jsp"; } @RequestMapping("/secondFinal") public String addFinal(){ return "addFinal"; } }
web.xml Servlet映射
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>SpringMVC</display-name> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
Spring MVC配置(mvc-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 组件扫描支持 --> <context:component-scan base-package="com.mvc" /> <!-- 转换、格式化与验证支持 --> <mvc:annotation-driven/> <!-- 视图解析器配置 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
排查方向与解决方案
修正视图返回值格式
控制器中add()方法返回"add.jsp",但配置的InternalResourceViewResolver已设置prefix="/WEB-INF/jsp/"和suffix=".jsp",拼接后会变成/WEB-INF/jsp/add.jsp.jsp,导致文件找不到。将返回值改为"add"即可:@RequestMapping("/firstAdd") public String add(){ return "add"; }验证项目上下文路径
确认项目部署后的上下文路径是否为spring_MVC_project,可通过服务器控制台或部署配置查看。若路径不符,需调整index.jsp中的链接路径,确保与实际上下文路径一致。检查组件扫描是否生效
确认context:component-scan的base-package正确覆盖com.mvc包,确保控制器被Spring容器扫描并注册。可通过添加日志或调试模式查看容器是否加载了addController。验证DispatcherServlet配置
确保mvc-servlet.xml文件放置在WEB-INF目录下(默认与servlet-name对应),若文件位置不对,需在servlet标签中添加init-param指定配置文件路径:<servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>检查index.jsp中的链接路径
确保index.jsp中的链接使用基于上下文路径的绝对路径,避免相对路径导致请求URL错误:<a href="${pageContext.request.contextPath}/firstAdd">跳转到add页面</a> <a href="${pageContext.request.contextPath}/secondFinal">跳转到addFinal页面</a>
内容的提问来源于stack exchange,提问作者Kelvin Huynh

