SpringMVC配置报错:DispatcherServlet无法赋值给jakarta.servlet.Servlet
解决SpringMVC中
org.springframework.web.servlet.DispatcherServlet无法赋值给jakarta.servlet.Servlet的问题 问题原因
这个错误是Servlet API版本与SpringMVC版本不兼容导致的:
- Spring Framework 6.x(含SpringMVC 6.x)基于Jakarta EE 9+,依赖
jakarta.servlet.*包; - Spring Framework 5.x及以下基于Java EE,依赖
javax.servlet.*包; - 两者包名完全不同,跨版本混用就会出现类型转换失败的报错。
解决步骤
1. 对齐SpringMVC与Servlet API版本
根据你使用的SpringMVC版本,选择对应的Servlet API依赖:
- 若用SpringMVC 6.x及以上:必须引入Jakarta Servlet API
- 若用SpringMVC 5.x及以下:必须引入Java EE Servlet API
2. 修正pom.xml依赖示例
示例1:SpringMVC 6.x + Jakarta Servlet API
<!-- SpringMVC核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.1.0</version> </dependency> <!-- Jakarta Servlet API(需与SpringMVC版本匹配) --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
示例2:SpringMVC 5.x + Java EE Servlet API
<!-- SpringMVC核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.29</version> </dependency> <!-- Java EE Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
3. 额外注意事项
- 禁止同时引入
javax.servlet-api和jakarta.servlet-api,避免依赖冲突; - 若使用Spring Boot,直接用对应的starter即可自动管理版本:
- Spring Boot 3.x(对应SpringMVC 6.x):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.2.0</version> </dependency> - Spring Boot 2.x(对应SpringMVC 5.x):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.7.15</version> </dependency>
- Spring Boot 3.x(对应SpringMVC 6.x):
内容的提问来源于stack exchange,提问作者YFF123
相关产品推荐
相关产品推荐

