Spring MVC注解控制器访问/home/user出现HTTP 404错误求助
解决Spring MVC注解控制器404问题的实用排查方案
嗨,我初学Spring MVC的时候也踩过一模一样的404坑!给你列几个最容易出问题的排查点,按顺序检查应该能找到原因:
先确认组件扫描配置覆盖了控制器包
不管你用Java配置还是XML配置,Spring必须能扫到你的控制器类才行:- 用Java配置的话,检查配置类上的
@ComponentScan注解,basePackages得包含你的控制器所在包(比如com.yourname.controller); - 用XML配置的话,确保
<context:component-scan base-package="com.yourname.controller"/>没写错包名,别把路径打错了。
- 用Java配置的话,检查配置类上的
核对@RequestMapping的路径层级
看看你的控制器代码:- 如果控制器类上标注了
@RequestMapping("/home"),那方法上得写@RequestMapping("/user"),组合起来才是/home/user; - 如果类上没加@RequestMapping,那方法上得直接写
@RequestMapping("/home/user")。别搞混层级,多写或少写斜杠都会导致路径不匹配。
- 如果控制器类上标注了
检查web.xml里的DispatcherServlet配置
你贴的web.xml代码不完整,重点看这两个关键配置:<url-pattern>必须是/(注意不是/*!/*会拦截所有请求包括静态资源,/才是Spring MVC的正确配置);- 一定要加
<load-on-startup>1</load-on-startup>,让DispatcherServlet在容器启动时就初始化,避免第一次请求才加载出问题。
给你个标准配置参考:
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>别漏了@Controller注解
控制器类必须标注@Controller才能被Spring识别成控制器,光加@RequestMapping是没用的!这点很容易忘,赶紧检查一下你的类上有没有这个注解。确认访问路径是否带了项目上下文
比如你的项目在Tomcat里部署的上下文路径是my-spring-app,那完整访问地址应该是http://localhost:8080/my-spring-app/home/user,而不是直接输入/home/user,很多新手会忽略这个项目名前缀。看日志找线索
开启Spring的DEBUG级别日志,启动项目后看看日志里有没有扫描到你的控制器类,有没有注册/home/user这个请求映射。如果日志里完全没相关记录,那肯定是组件扫描或者控制器注解的问题,回到前面的步骤再排查。
内容的提问来源于stack exchange,提问作者HMD
相关产品推荐
相关产品推荐

