Classcastexception-Fehler: DispatcherServlet kann nicht umgewandelt werden, Servlet
Habe ich eine neue Spring-MVC-Projekt mit maven-eclipse-und der folgende Fehler wird geworfen:
(Ich habe versucht, einige Lösungen aus dem stackoverflow, die funktioniert nicht in meinem Fall. Einige Probleme mit dem pom.xml die konnte ich nicht finden. Ich fügte hinzu, sofern Umfang für die servlet-api und versucht, das hat nicht funktioniert entweder.)
SEVERE: Servlet /Remindem threw load() exception
java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet
cannot be cast to javax.servlet.Servlet
Meine pom.xml ist wie folgt:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.org</groupId>
<artifactId>Remindem</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Remindem</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.8.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.0.Beta2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>2.5.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.3.RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- Spring MVC framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.5.6</version>
<scope>compile</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.19</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<url>http://localhost:8080/Remindem</url>
</configuration>
</plugin>
</plugins>
</build>
Meine web.xml ist wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Remindem</display-name>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>svn</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/SpringAppServlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>svn</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern
zu
provided
hat diese Beschreibung:aus der
maven
docs. Sie sind im Grunde sagen, Maven zur Verfügung gestellt, das Glas für die Zusammenstellung, aber zur Laufzeit, verwenden einige andere, die servlet-Containers, jar.tomcat
Abhängigkeit? Wenn nicht, entfernen Sie es. Etwas Herumspielen mit Ihren Servlet jar-Versionen.In Ihrem Fall, classcastexception-Fehler zu sein scheint, weil von Klassen geladen werden, die von verschiedenen classloadern. Sagen, Sie haben die servlet-api.jar enthalten Fehler in Ihren WEB-INF/lib und die Sie gesetzt hatte PARENT_LAST gilt auch für Ihre Web-App-class-loader. Wenn Sie auf einem application server wie dem auch WAR, dies würde bedeuten, dass Sie laden-interface mit einem class-loader (einige class-loader oben) und-Implementierung (servlet-api jar nur z.B.) mit einem anderen class loader an der Unterseite.
Dem application server verwendest du? Ich denke, Servlet-Gläser-Dateien sollten durch Ihre Anwendung srver.
Halten Geltungsbereich als 'versehen' und versuchen Sie es halten, dass jar im tomcat/lib-Ordner. Dies ist, weil jeder class loader des jeweiligen Krieges zu laden versucht seinen eigenen Servlet-api-Klassen separat,im Vergleich zu application class loader lädt das Servlet-api-Klassen in container-Ebene.
Also, wenn u können, machen das Glas bewegt, um CATALINA_HOME/lib.Sie haben die benötigten Klassen geladen, die von application class loader nur ein und dieselbe version verwiesen wird quer durch alle Kriege.
Rahmen 'zur Verfügung gestellt' vermittelt class loader im Krieg level, dass die Klassen erforderlich, für diese ist bereits geladen application class loader und beharrt class loader bei Ihrem Krieg Ebene möglicherweise nicht erforderlich, um erstellen Sie separate Instanzen oder version, für die es verursachen, dass die class cast exception