ClassCastException: DispatcherServlet ne peut pas être jeté à la Servlet
J'ai créé un nouveau Spring MVC projet avec maven-eclipse et l'erreur suivante est générée:
(J'ai essayé quelques solutions à partir de la stackoverflow qui ne fonctionne pas dans mon cas. Un problème avec la pom.xml que je ne pouvais pas trouver. J'ai ajouté de la servlet-api et essayé qui ne fonctionnait pas non plus.)
SEVERE: Servlet /Remindem threw load() exception
java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet
cannot be cast to javax.servlet.Servlet
Mon pom.xml est comme suit:
<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>
Mon web.xml est comme suit:
<?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>
OriginalL'auteur Arun | 2013-07-22
Vous devez vous connecter pour publier un commentaire.
Changement
à
provided
a cette description:de la
maven
docs. Vous êtes essentiellement en disant que Maven a fourni le pot pour la compilation, mais, au moment de l'exécution, l'utilisation de certains autres, le conteneur de servlets, jar.Ce conteneur version êtes-vous? Essayez le nettoyage et la reconstruction de votre projet dans Eclipse et Maven.
Je ne suis pas sûr de conteneur version que j'utilise. Mais, c'est de cette manière que je ne. - Je exécuter maven propre, maven installer et ensuite faire un build maven pour qui j'offre le but que tomcat:run
Est-il quelque chose que vous avez besoin de votre maven
tomcat
dépendance? Si non, retirez-la. Quelque chose à déconner avec votre Servlet jar versions.J'ai enlevé le tomcat de dépendance et toujours la même erreur
OriginalL'auteur Sotirios Delimanolis
Dans votre cas, ClassCastException semble être à cause de classes chargées par les différents chargeurs de classes. Dire, vous avez le servlet-api.jar inclus par erreur dans votre WEB-INF/lib et que vous vous étiez fixé PARENT_LAST vrai pour votre webapp chargeur de classe. Si vous êtes en cours d'exécution sur un serveur d'application comme l'a ÉTÉ, cela signifie que vous êtes l'interface de chargement avec un chargeur de classes (une classe loader en haut) et la mise en œuvre (servlet-api jar seulement un par exemple) avec un autre chargeur de classe d'en bas.
OriginalL'auteur Rajarajan Pudupatti Sundari Je
De serveur d'applications que vous utilisez? Je pense que Servlet pots de fichiers doivent être fournies par votre application srver.
répondu par Sotirios Delimanolis , c'est exactement ce que je voulais dire.
<la dépendance> <groupId > org.springframework</groupId> <artifactId>printemps-contexte</artifactId> <version>3.2.3.COMMUNIQUÉ de< version> <champ>compiler</> </dépendance> supprimer <champ>compiler</>, et essayer , je suis tout juste en comparant les votre pom avec mon espace de travail pom.
OriginalL'auteur Philip Puthenvila
Portée de garder comme "prévu" et essayez de garder ce pot dans tomcat/lib dossiers. C'est parce que de chaque chargeur de classe de la guerre essaie de charger ses propres Servlet-api classes séparément,par rapport à la classe d'application du chargeur qui charge le Servlet-les classes de l'api au niveau du conteneur.
Donc, si vous pouvez faire le pot déménagé à CATALINA_HOME/lib.vous avez de classes chargées par l'application de la classe loader seule et même version sera visé par toutes les guerres.
champ d'application", à condition " permet à la classe de chargeur de guerre niveau que les classes nécessaires à ce qui est déjà chargé par application du chargeur de classe et insiste chargeur de classe lors de sa guerre de niveau ne sont pas tenus de créer des instances distinctes ou version pour que la cause de la classe cast exception
OriginalL'auteur User 4.5.5