如何解决SpringMVC中DispatcherServlet类未找到异常及Deployment Assembly操作问题?
首先来看你遇到的核心报错:
SEVERE: Servlet [SpringMVC] in web application [/SpringMVC] threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispactherServlet
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1136)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:544)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:525)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1044)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:983)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4978)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5290)
先提个小细节:报错里的DispactherServlet是拼写错误(正确类名是DispatcherServlet),先检查你的web.xml里的配置是不是也写错了,这是很容易踩的小坑!
这个错误本质是Spring MVC的核心依赖没有被正确部署到Tomcat的WEB-INF/lib目录下,Tomcat找不到对应的类。你尝试的Deployment Assembly方法没成功,大概率是因为没选对依赖来源或目标路径,下面给你几个靠谱的解决方案:
方案1:用Maven/Gradle确保依赖正确打包
如果你的项目用Maven管理,先确认pom.xml里的配置没问题:
<!-- 确保打包类型是war --> <packaging>war</packaging> <dependencies> <!-- Spring MVC核心依赖,替换成你实际使用的版本 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.20</version> </dependency> <!-- Servlet API依赖,scope设为provided避免和Tomcat自带的冲突 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies>
执行mvn clean package生成war包,这个包会自动把所有依赖打包到WEB-INF/lib下,直接把war包丢到Tomcat的webapps目录重启服务器就行。
方案2:手动添加依赖到WEB-INF/lib
如果是手动管理依赖:
- 下载Spring MVC的核心jar包(包括
spring-webmvc.jar、spring-web.jar、spring-core.jar、spring-context.jar等) - 把这些jar包复制到项目的
WEB-INF/lib目录下 - 重新部署项目到Tomcat,Tomcat会自动加载这个目录下的类文件
方案3:修正Deployment Assembly配置(解决Finish按钮禁用问题)
如果还是想用这个方法,按步骤来:
- 右键项目 → 选择
Properties(Eclipse)或Open Module Settings(IDEA) - 找到
Deployment Assembly选项 - 点击
Add→ 选择Java Build Path Entries→ 下一步 - 选中所有Spring相关的依赖(Maven项目会显示
Maven Dependencies) - 确认目标路径是
WEB-INF/lib(默认就是这个,要是不对手动修改) - 这时候Finish按钮应该会激活,完成配置后重新部署项目
最后再强调一遍:一定要检查web.xml里的DispatcherServlet类名拼写,别像报错里那样少打个t,不然依赖再对也白搭!正确的配置示例:
<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>
内容的提问来源于stack exchange,提问作者BlackCat

