2012-07-28 10 views
15

Podczas uruchamiania serwer Tomcat otrzymuję wyjątekServletDispatcher nie mogą być oddane do wyjątku Javax.servlet.Servlet w moim projekcie sprężyny

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

Używam spring3 ale jest słoik spring2-5-6 w moim lib folder, usunąłem go z pom.xml, ale nadal pojawia się w folderze lib - choć nie jestem pewien, czy to jest problem. Korzystam z IDE Eclipse. Dzięki!!

<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> 
+0

W moim przypadku, usunięto wpis javax.servlet z pom.xml i raczej dodano bibliotekę tomcat w mojej ścieżce klas. – JavaTec

Odpowiedz

29

Nie powinieneś używać wielu wersji Spring JARs w jednym projekcie, ale to nie jest problem.

Problem jest najprawdopodobniej spowodowany przez klasy API serwletów załadowane przez dwa różne programy ładujące klasy. Prawdopodobnie masz servlet*.jar lub kilka innych JARów specyficznych dla kontenera w twojej WAR. Usuń je, ustawiając ich <scope> na provided w pom.xml.

+0

Po prostu mam javax.servlet-api dla serwletu w moim pom.xml. rest wszystkie są artefaktami org.springframework dla wiosenno-webmvc, spring-webflow, spring-tx, spring-web, spring-beans i hibernate-adnotacje. Opublikowaliśmy zależności z mojego pom.xml powyżej. dziękuje. – Manth

+1

@Manth: tak jak powiedziałem, po prostu zmień zakres 'javax.servlet-api' na' provided'. Czy to pomogło? –

+1

Nurkiewiczit: nie działa. Zmieniłem javax.servlet-api, tak jak powiedziałeś. Po kompilacji nadal widzę plik javax.servlet-api-3.1-b01.jar w folderze target/web-inf/lib. – Manth

0

W moim przypadku nie było problemu z bibliotekami. Byłem zmianę standardowego Servlet być realizowane z wiosną, więc po these instructions, że parafrazując tutaj tylko w przypadku, gdy strona idzie w dół później:

  1. Wdrożenie org.springframework.web.HttpRequestHandler zamiast przedłużenia javax.servlet

    public class MyServlet implements HttpRequestHandler {

  2. Utworzono fasoli w applicationContext.xml (zrobiłem to w dyspozytora-servlet.xml)

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

  3. Określ aplet w web.xml, zmieniając starą klasę (com.package.to.MyServlet) na wiosenną 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>

musiałem zrobić dodatkowy krok, aby uniknąć FileNotFoundException o applicationContext.xml wykonując następujące czynności w 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>

Powiązane problemy