DispatcherServlet 无法转换为 class jakarta.servlet.Servlet (ClassCastException)

DispatcherServlet cannot be cast to class jakarta.servlet.Servlet (ClassCastException)

我遇到了与这里类似的问题DispatcherServlet cannot be cast to Servlet 这是 运行 使用 Eclipse 的新 Spring MVC 项目。 但是,所有答案都建议使用 Maven 的解决方案,而我没有使用 Maven。

这个问题我找了一天都没有解决。

INFO: Starting Servlet engine: [Apache Tomcat/10.0.4]
Mar 22, 2021 9:59:10 AM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took 
[447] milliseconds.

Mar 22, 2021 9:59:10 AM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for 
this logger for a complete list of JARs that were scanned but no TLDs were found in them. 
Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.


 Mar 22, 2021 9:59:11 AM org.apache.catalina.core.ApplicationContext log
 INFO: Marking servlet [dispatcher] as unavailable

 Mar 22, 2021 9:59:11 AM org.apache.catalina.core.StandardContext loadOnStartup
 SEVERE: Servlet [dispatcher] in web application [/spring-mvc-demo] threw load() exception
 java.lang.ClassCastException: class org.springframework.web.servlet.DispatcherServlet cannot 
 be cast to class jakarta.servlet.Servlet (org.springframework.web.servlet.DispatcherServlet 
 is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader 
 @62e70ea3; jakarta.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader 
 @8bd1b6a)
 
  at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1043)
  at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:984)

Spring(和Spring Boot)目前只支持JavaEE,不支持JakartaEE。这意味着它只会 运行 on/with JavaEE 兼容服务器。 Tomcat10 is an implementation of the JakartaEE specification which currently isn't supported.

唯一的解决办法是降级到Tomcat9.