今天工作的时候帮同事解决一个404错误,弄了半个小时才找到问题,原来是没有配置好
<mvc:annotation-driven />
。其实在开发过程中遇到过很多次404错误,本文总结一下常见原因。
项目中一般都使用tomcat
加Spring MVC
组合,它们两的配置错误都可能导致404
Tomcat
tomcat的应用上下文目录配置错误
一般是因为tomcat的应用上下文目录配置错误,比如如果项目部署在${TOMCAT_HOME}/webapps/tenmao
,那么所有的URL都应该带有前缀tenmao
。如果忘记了,则会导致所有请求都是404。web.xml配置错误
常见原因是由于<servlet-mapping>
配置错误,比如
<servlet-mapping>
<servlet-name>dispatch-servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以上这种配置,就要求所有的URL都以.do
结尾,如果新增的接口没有,也会导致404
- 判断方法
tomcat导致的404,请求转发到DispatcherServlet
,也就不会执行方法org.springframework.web.servlet.DispatcherServlet#doService
Spring MVC
常见原因是:
没有配置注解
@RestController
或@ResponseBody
缺少
<mvc:annotation-driven />
判断方法
断点在下面函数,可以看到所有注册的handlerMap
,如果不在,则说明Controller或对应的方法注册失败
org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#lookupHandler
参考
- SpringMVC 启动流程及相关源码分析
- What does <mvc:annotation-driven /> do?
- <mvc:annotation-driven />与<context:annotation-config />
- SpringMVC和Spring的配置文件扫描包详解
欢迎讨论,本人承诺非假日期间2小时内回复