簡體   English   中英

在我的spring項目中,ServletDispatcher不能轉換為Javax.servlet.Servlet異常

[英]ServletDispatcher cannot be cast to Javax.servlet.Servlet exception in my spring project

在啟動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>

您不應該在一個項目中使用多個版本的Spring JAR,但這不是問題。

問題很可能是由兩個不同的類加載器加載的servlet API類引起的。 可能你的WAR中有servlet*.jar或其他一些特定於容器的JAR。 通過將其<scope> providedpom.xml provided的方法來刪除它們。

就我而言,它不是圖書館的問題。 我正在改變一個用Spring實現的標准Servlet,所以我按照這些說明進行了解釋,以防萬一頁面出現故障:

  1. 實現org.springframework.web.HttpRequestHandler而不是擴展javax.Servlet

    public class MyServlet implements HttpRequestHandler {

  2. 在applicationContext.xml中創建了bean(我在dispatcher-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>

我不得不做一個額外的步驟來避免關於applicationContext.xml的FileNotFoundException在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM