2012-07-28 24 views
15

Trong khi bắt đầu máy chủ tomcat Tôi nhận được một ngoại lệServletDispatcher không thể được đúc để Javax.servlet.Servlet ngoại lệ trong dự án mùa xuân của tôi

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

Tôi đang sử dụng spring3 nhưng có jar spring2-5-6 trong lib của tôi thư mục, tôi đã xóa nó khỏi tệp pom.xml nhưng vẫn xuất hiện trong thư mục lib - mặc dù tôi không chắc đó có phải là vấn đề hay không. Tôi đang sử dụng IDE Eclipse. Cảm ơn!!

<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

Trong trường hợp của tôi, tôi gỡ bỏ javax.servlet nhập từ pom.xml và thay vào đó được thêm vào thư viện tomcat trong classpath của tôi. – JavaTec

Trả lời

29

Bạn không nên sử dụng nhiều phiên bản của Spring JAR trong một dự án, nhưng đây không phải là vấn đề.

Sự cố rất có thể do các lớp API servlet được tải bởi hai trình nạp lớp khác nhau. Có thể bạn có servlet*.jar hoặc một số JAR chứa container khác trong WAR của bạn. Xóa chúng bằng cách đặt <scope> của chúng tôi thành provided trong pom.xml.

+0

Tôi chỉ có javax.servlet-api cho servlet trong tệp pom.xml của mình. phần còn lại là các tạo phẩm của org.springframework cho spring-webmvc, spring-webflow, spring-tx, spring-web, spring-beans và hibernate-annotations. Tôi đã đăng các phụ thuộc từ tệp pom.xml của tôi ở trên. cám ơn. – Manth

+1

@Manth: như tôi đã nói, chỉ cần thay đổi phạm vi 'javax.servlet-api' thành' được cung cấp'. Nó có giúp gì không? –

+1

Nurkiewiczit: không hoạt động. Tôi đã thay đổi javax.servlet-api để cung cấp như bạn đã nói. Sau khi biên dịch tôi vẫn thấy javax.servlet-api-3.1-b01.jar trong thư mục target/web-inf/lib của tôi. – Manth

0

Trong trường hợp của tôi, đó không phải là vấn đề với thư viện. Tôi đã thay đổi một Servlet tiêu chuẩn được thực hiện với mùa xuân, vì vậy tôi tiếp these instructions, mà tôi diễn giải ở đây chỉ trong trường hợp trang đi xuống sau:

  1. Thực hiện org.springframework.web.HttpRequestHandler thay vì mở rộng javax.servlet

    public class MyServlet implements HttpRequestHandler {

  2. Created đậu trong applicationContext.xml (tôi đã làm nó trong điều phối-servlet.xml)

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

  3. Xác định servlet trong web.xml, thay đổi lớp cũ (com.package.to.MyServlet) để mùa xuân 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>

tôi phải làm một bước bổ sung để tránh một FileNotFoundException về applicationContext.xml cách làm như sau trong 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>

Các vấn đề liên quan