ServletDispatcher ne peut pas être converti en exception Javax.servlet.Servlet dans mon projet Spring.

Tout en démarrant le serveur tomcat, je reçois une exception

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

J’utilise spring3 mais il y a jar spring2-5-6 dans mon dossier lib, je l’ai enlevé de pom.xml mais apparaît toujours dans le dossier lib – bien que je ne sois pas sûr que ce soit un problème. J’utilise Eclipse IDE. Merci!!

   org.hibernate.javax.persistence hibernate-jpa-2.1-api 1.0.0.Draft-6 comstack   org.hibernate hibernate-annotations 3.5.6-Final comstack   org.springframework spring-beans 3.1.2.RELEASE comstack   org.springframework spring-context 3.1.2.RELEASE comstack   org.springframework spring-web 3.1.2.RELEASE comstack   org.springframework spring-tx 3.1.2.RELEASE comstack   org.springframework spring-webmvc 3.1.2.RELEASE comstack   javax.servlet javax.servlet-api 3.1-b01 comstack   org.springframework spring-webflow 1.0.6 comstack   

Vous ne devriez pas utiliser plusieurs versions de fichiers JAR Spring dans un projet, mais ce n’est pas le problème.

Le problème est probablement dû aux classes API de servlet chargées par deux chargeurs de classes différents. Vous disposez probablement de servlet*.jar ou d’autres fichiers JAR spécifiques à un conteneur dans votre fichier WAR. Supprimez-les en définissant leur sur provided dans pom.xml .

Dans mon cas, ce n’était pas un problème avec les bibliothèques. Je changeais un Servlet Standard pour être implémenté avec Spring, alors j’ai suivi ces instructions , que je paraphrase ici juste au cas où la page s’effondrerait plus tard:

  1. Implémentez org.springframework.web.HttpRequestHandler au lieu d’étendre javax.Servlet

    public class MyServlet implements HttpRequestHandler {

  2. Création du bean dans le fichier applicationContext.xml (je l’ai créé dans le fichier dispatcher-servlet.xml)

  3. Spécifiez le servlet dans le fichier Web.xml , en remplaçant l’ancienne classe ( com.package.to.MyServlet ) par Spring HttpRequestHandlerServlet .

    MyServlet org.springframework.web.context.support.HttpRequestHandlerServlet MyServlet /MyServlet

J’ai dû effectuer une étape supplémentaire pour éviter une exception FileNotFoundException à propos de applicationContext.xml en procédant comme suit dans le fichier web.xml

contextConfigLocation /WEB-INF/dispatcher-servlet.xml org.springframework.web.context.ContextLoaderListener