在启动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-56,我从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,但这不是问题所在。
这个问题很可能是由两个不同的类加载器加载的servletneneneba API类引起的。您的WAR中可能有servlet*.jar
或其他特定于容器的JAR。通过在pom.xml
中将其<scope>
设置为provided
来移除它们。
在我的案例中,这不是库的问题。我正在更改一个要用Spring实现的标准Servlet,所以我遵循了这些说明,我在这里转述了一下,以防页面稍后关闭:
-
实现
org.springframework.web.HttpRequestHandler
而不是扩展javax。Servletpublic class MyServlet implements HttpRequestHandler {
-
在applicationContext.xml中创建了bean(我是在dispatcher servlet.xml中创建的)
<bean id="MyServlet" class="com.package.to.MyServlet"/>
-
在Web.xml中指定servlet,将旧类(com.package.to.MyServlet)更改为SpringHttpRequestHandlerServlet。
<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>