在我的spring项目中,ServletDispatcher无法强制转换为Javax.servlet.Servletexception

在启动tomcat服务器时,我得到一个例外

SEVERE: Servlet /MavenWeb threw load() exception java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet 

我正在使用spring3,但我的lib文件夹中有jar spring2-5-6,我从pom.xml中删除它但仍然出现在lib文件夹中 – 虽然我不确定这是否是一个问题。 我正在使用Eclipse IDE。 谢谢!!

   org.hibernate.javax.persistence hibernate-jpa-2.1-api 1.0.0.Draft-6 compile   org.hibernate hibernate-annotations 3.5.6-Final compile   org.springframework spring-beans 3.1.2.RELEASE compile   org.springframework spring-context 3.1.2.RELEASE compile   org.springframework spring-web 3.1.2.RELEASE compile   org.springframework spring-tx 3.1.2.RELEASE compile   org.springframework spring-webmvc 3.1.2.RELEASE compile   javax.servlet javax.servlet-api 3.1-b01 compile   org.springframework spring-webflow 1.0.6 compile   

您不应该在一个项目中使用多个版本的Spring JAR,但这不是问题。

问题很可能是由两个不同的类加载器加载的servlet API类引起的。 可能你的WAR中有servlet*.jar或其他一些特定于容器的JAR。 通过将其 providedpom.xml provided的方法来删除它们。

就我而言,这不是图书馆的问题。 我正在更改要用Spring实现的标准Servlet,所以我按照这些说明进行了解释,以防万一页面出现故障:

  1. 实现org.springframework.web.HttpRequestHandler而不是扩展javax.Servlet

    public class MyServlet implements HttpRequestHandler {

  2. 在applicationContext.xml中创建了bean(我在dispatcher-servlet.xml中完成了它)

  3. Web.xml中指定servlet,将旧类( com.package.to.MyServlet )更改为Spring HttpRequestHandlerServlet

    MyServlet org.springframework.web.context.support.HttpRequestHandlerServlet MyServlet /MyServlet

我不得不做一个额外的步骤来避免关于applicationContext.xml的FileNotFoundException在web.xml中执行以下操作

contextConfigLocation /WEB-INF/dispatcher-servlet.xml org.springframework.web.context.ContextLoaderListener