ServletDispatcher 不能在我的 spring 项目中强制转换为 Javax.servlet.Servlet 异常

2022-09-03 12:27:11

在启动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。谢谢!!

<dependencies>
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
      <version>1.0.0.Draft-6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>3.5.6-Final</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.1.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>3.1.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>3.1.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>3.1.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>3.1.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1-b01</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webflow</artifactId>
      <version>1.0.6</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

答案 1

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

这个问题很可能是由两个不同的类装入器装入的 servlet API 类引起的。可能您在 WAR 中有一些或其他一些特定于容器的 JAR。通过在 中将其设置为 来删除它们。servlet*.jar<scope>providedpom.xml


答案 2

在我的情况下,这不是图书馆的问题。我正在更改要与Spring一起实现的标准Servlet,所以我遵循了这些说明,我在这里解释一下,以防页面稍后下降:

  1. 实现而不是扩展javax。Servletorg.springframework.web.HttpRequestHandler

    public class MyServlet implements HttpRequestHandler {

  2. 在应用程序Context中创建bean.xml(我在调度程序servlet中完成了.xml)

    <bean id="MyServlet" class="com.package.to.MyServlet"/>

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

    <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping>

我必须做一个额外的步骤来避免FileNotFoundException关于appramentContext.xml在Web中执行以下操作.xml

<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>


推荐