You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringMVC配置报错:DispatcherServlet无法赋值给Servlet接口

解决SpringMVC中DispatcherServlet类型不匹配问题

核心原因

这个错误本质是Servlet API版本与SpringMVC版本不兼容:

  • SpringMVC 5.x及以下依赖javax.servlet包(Java EE体系)
  • SpringMVC 6.x及以上强制依赖jakarta.servlet包(Jakarta EE体系)
    两者的Servlet类属于不同包空间,完全不兼容。

分步排查与修复

1. 统一依赖版本体系

  • 如果使用SpringMVC 6.x+:
    必须移除所有javax.servlet-api依赖,替换为Jakarta EE版本:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    

    同时确保SpringMVC版本为6.x+,示例:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>6.1.2</version>
    </dependency>
    
  • 如果使用SpringMVC 5.x及以下:
    必须保留javax.servlet-api,推荐版本4.0.1(兼容多数容器):

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    

    SpringMVC版本对应5.x,示例:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.30</version>
    </dependency>
    

2. 检查web.xml命名空间

  • 若用Jakarta EE(SpringMVC 6.x+),web.xml必须使用Jakarta命名空间:

    <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
             version="6.0">
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
    </web-app>
    
  • 若用Java EE(SpringMVC 5.x),web.xml使用旧命名空间:

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        </servlet>
    </web-app>
    

3. 清理冲突依赖

执行依赖树命令检查是否有第三方依赖引入不同版本的Servlet API:

  • Maven:mvn dependency:tree
  • Gradle:./gradlew dependencies
    找到冲突依赖后用<exclusions>排除,示例:
<dependency>
    <groupId>第三方包groupId</groupId>
    <artifactId>第三方包artifactId</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 匹配容器版本

  • Tomcat 10.x及以上支持Jakarta EE(对应SpringMVC 6.x+)
  • Tomcat 9.x及以下支持Java EE(对应SpringMVC 5.x)
    禁止混用容器与依赖版本,比如Tomcat 9搭配SpringMVC 6.x必然报错。

内容的提问来源于stack exchange,提问作者Aldar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:22:17