启动服务器运行应用时出现HTTP Status 404 - Servlet DispatcherServlet不可用问题求助
解决DispatcherServlet不可用导致的HTTP 404错误
我来帮你搞定这个DispatcherServlet不可用的404问题!这是Spring MVC项目里挺常见的坑,咱们一步步排查:
1. 先检查web.xml里的DispatcherServlet配置
- 首先得确认你在
web.xml里正确注册了DispatcherServlet,标准配置应该是这样的:<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> - 重点盯一下
<servlet-class>的全类名,别写错包名或者类名,比如把org.springframework写成org.springframe这种低级错误很容易犯。 - 别忘了设置
<load-on-startup>1</load-on-startup>,这样服务器启动时就会加载这个Servlet,不会等到请求过来才加载,避免初始化失败。
2. 确认Spring Web MVC依赖有没有到位
- 如果是Maven项目,去
pom.xml里看看有没有加这个依赖:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>你的Spring版本号</version> </dependency> - Gradle项目的话,对应依赖是:
implementation 'org.springframework:spring-webmvc:你的Spring版本号' - 还要检查依赖有没有被意外排除,或者本地仓库里的jar包是不是没下载成功——有时候网络问题会导致依赖缺失,直接找不到DispatcherServlet类。
3. 验证DispatcherServlet类是否在类路径里
- 打开项目的依赖库,找到spring-webmvc的jar包,看看里面有没有
org.springframework.web.servlet.DispatcherServlet这个类。 - 用IDE的搜索功能更方便:IDEA按Ctrl+Shift+N,Eclipse按Ctrl+Shift+T,直接搜类名。搜不到的话,肯定是依赖没加对。
4. 检查项目部署的细节
- 确认项目已经正确部署到服务器(比如Tomcat),去服务器的部署目录里找
WEB-INF/lib文件夹,看看里面有没有spring-webmvc的jar包。有时候IDE部署会漏掉依赖,得手动确认。 - 看看服务器的日志,比如Tomcat的
localhost.log或者catalina.log,里面会有更详细的错误信息,比如ClassNotFoundException,这能直接帮你定位问题根源。
5. 清理重建项目,排除缓存问题
- 有时候编译后的文件有残留或者缓存,试试清理重建:
- IDEA:点
Build->Clean Project,然后再Build->Rebuild Project - Eclipse:点
Project->Clean,选中你的项目清理
- IDEA:点
- 重启服务器,再重新部署一次,很多时候缓存导致的问题这样就能解决。
6. 检查Spring配置文件的位置
- 如果你的DispatcherServlet需要加载自定义的Spring配置文件(比如
dispatcher-servlet.xml),要么把文件放在WEB-INF目录下,要么在web.xml里通过<init-param>指定正确路径:<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> - 要是配置文件路径错了,DispatcherServlet初始化失败,也会导致它不可用。
内容的提问来源于stack exchange,提问作者Deepak Malav
相关产品推荐
相关产品推荐

