java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

87

J'utilise 3.1.0.RELEASE de printemps , et mon conteneur de servlets est tomcat 7 et mon IDE est indigo éclipse et le pot printemps-webmvc-3.1.0.RELEASE.jar qui contient le DispatcherServlet existe dans le dossier lib, et pourtant , quand exécutant l'application, j'obtiens l'exception:

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:126)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Veuillez indiquer pourquoi je reçois cette exception et comment y remédier.

EDIT: voici mes fichiers de configuration:

1- .springBeans:

<?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
    <version>1</version>
    <pluginVersion><![CDATA[2.9.0.201203011806-RELEASE]]></pluginVersion>
    <configSuffixes>
        <configSuffix><![CDATA[xml]]></configSuffix>
    </configSuffixes>
    <enableImports><![CDATA[false]]></enableImports>
    <configs>
        <config>src/main/webapp/WEB-INF/checkout-servlet.xml</config>
    </configs>
    <configSets>
    </configSets>
</beansProjectDescription>

2- web.xml:

<web-app>
  <display-name>Checkout</display-name>

  <servlet>
    <servlet-name>checkout</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>checkout</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

</web-app>

3- checkout-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.myapp"/>

    <bean id="myService" class="com.myapp.MyService"/>

</beans>

également en essayant d'accéder à n'importe quelle page de l'application, j'obtiens l'exception:

HTTP Status 404 - Servlet checkout is not available

type Status report

message Servlet checkout is not available

description The requested resource (Servlet checkout is not available) is not available.
Apache Tomcat/7.0.22
Mahmoud Saleh
la source
pouvez-vous publier vos fichiers de configuration de printemps et nous dire sur quel serveur d'application est-il censé fonctionner?
Gergely Szilagyi
@Gergely Szilagyi, j'ai mis à jour la question.
Mahmoud Saleh
supprimé ma réponse, car elle n'était pas utile. désolé :(
Gergely Szilagyi
@iNan, j'utilise eclipse indigo
Mahmoud Saleh
1
Je crois que ce n'est pas directement un CNF sur DispatcherServlet mais une classe dépendante a généré une erreur. Vérifiez si vous voyez une autre exception imbriquée.
adarshr le

Réponses:

248

Vous devez ajouter la «dépendance Maven» dans l'assembly de déploiement

  • faites un clic droit sur votre projet et choisissez les propriétés.
  • cliquez sur Assemblée de déploiement.
  • cliquez sur ajouter
  • cliquez sur "Entrées du chemin de construction Java"
  • sélectionnez Dépendances Maven "
  • cliquez sur Terminer.

Reconstruire et déployer à nouveau

Remarque: Ceci s'applique également aux projets non maven .

Krakos
la source
Sympa - j'étais confus de voir même après avoir ajouté la dépendance appropriée dans mon pom.xml n'a pas résolu l'erreur jusqu'à ce que j'ai suivi comme ci-dessus ..
srinivas
Nice .. solution parfaite
Prasad VS
1
Pourquoi ça marche? Je veux dire, toutes les dépendances de maven ne devraient-elles pas être disponibles? Si j'utilisais le branchement Tomcat7 avec tomcat7: run, comment cela serait-il accompli?
Johnny Bigoode
Fonctionne comme du charme!
yrazlik
Ceci est également applicable pour les projets non maven. !! J'ai créé un projet maven et j'ai eu le même problème. cette solution a fonctionné pour moi.
Bandham Manikanta
33

Deux réponses possibles:

1- Vous n'avez pas inclus les pots spring-beans et spring-context dans votre bibliothèque. Si vous utilisez maven (ce qui vous aidera beaucoup) ces deux lignes suffiront

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>

2- Les jars nécessaires sont dans votre classpath mais ne sont pas déployés sur tomcat.

Serkan Arıkuşu
la source
Bien que vous ayez résolu le problème, mais je ne pense pas que votre problème puisse comprendre que vous utilisez maven.
Serkan Arıkuşu
1
maven est tagué dans la question!
Mahmoud Saleh
3
l'ajout spring-webmvcà mon pom.xmlrésoudra le problème. Merci.
OO7
19

Salut les gars, j'ai eu le même problème avec Idea Intellij et Spring 4 J'ai résolu le problème et je voulais partager la réponse avec vous.

J'utilise tomcat 7 / idea intellij 13 / spring 4

dépendances pom.xml

  <properties>
    <spring.version>4.0.5.RELEASE</spring.version>
  </properties>

  <dependencies>     
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
enter code here
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
        <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
  </dependencies>

Dans idea Intellij, vous devez aller dans Fichier -> Paramètres du projet -> Artefacts. ensuite entrez la description de l'image ici

nettoyer -> reconstruire le projet -> construire l'artefact et tout ira bien ...

Adelin
la source
Tu es un génie. Pouvez-vous expliquer quelle différence cela fait? Comment se fait-il que Maven importe tout, mais vous devez toujours le faire pour que cela fonctionne?
DMurta
@DMurta qui a dit que maven exportait tout?
Adelin
12

Cela résout le problème pour moi. C'est facile et assez simplement expliqué.

Étape 1

  • Faites un clic droit sur le projet
  • Cliquez sur Propriétés

Étape 2

  • Cliquez sur l'onglet Assemblage de déploiement dans le
  • Cliquez sur Ajouter ...

Étape 3

  • Cliquez sur Entrées du chemin de construction Java

Étape 4

  • Cliquez sur Dépendances Maven
  • Cliquez sur le bouton Terminer

Étape 5

  • Redéployez l'application Spring MVC sur Tomcat
  • Redémarrez Tomcat
  • Élément de liste

classenotfoundexception

Lycone
la source
Souhaitez-vous reconsidérer la note que vous avez accordée à ma proposition?
Lycone
10

J'ai trouvé que dans l' assemblage de déploiement , il y avait l'entrée:

[persisted container] org.maven.ide.eclipse.maven2_classpath_container

Je l'ai supprimé et ajouté l' maven dependenciesentrée, et cela fonctionne très bien maintenant.

Mahmoud Saleh
la source
5

Si tous ces conseils ne fonctionnent pas, vous devez recréer votre serveur (Tomcat ou autre). Cela a résolu mon problème.

Chinbold Gansukh
la source
5

Incluez ci-dessous la dépendance dans votre pom.xml

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>
Victor
la source
4

J'étais confronté au même problème. Quand j'ai vu dans le dossier maven repository .m2 (.... m2 \ repository \ org \ springframework \ spring-webmvc) dans mon local, j'ai trouvé deux dossiers 3.2.0.RELEASE. Alors j'en ai enlevé un. Puis je suis allé au projet, clic droit-> propriétés-> déploiement essembly-> ajouter des dépendances maven. clean build, puis redémarrez le serveur. Ensuite, le DispatcherServlet a été chargé.

TKS
la source
Oui, cela a également résolu mon problème, une idée de la raison pour laquelle il est nécessaire d'ajouter des dépendances dans l'assembly de déploiement dans eclipse?
Freelancer
2

Dans mon cas, j'obtiens ce problème après avoir utilisé l'utilitaire de projet de mise à jour de maven. J'ai essayé toutes les solutions de contournement que vous avez suggérées, mais rien ne semblait fonctionner. À la fin, la solution consistait simplement à supprimer le projet du serveur pour s'assurer qu'il était propre et à l'ajouter à nouveau. Ensuite, ça marche, j'espère que cette solution pourra vous aider.

user2947452
la source
2

Vous pouvez utiliser le serveur GlassFish et l'erreur sera résolue. J'ai essayé avec tomcat7 et tomcat8 mais cette erreur arrivait continuellement mais résolue avec GlassFish. Je pense que c'est un problème avec le serveur.

Voici les résultats avec tomcat7: Résultats avec tomcat7

Voici les résultats avec GlassFish: Résultats avec GlassFish

Superbe Saif
la source
1

faites un clic droit sur votre projet et choisissez les propriétés. cliquez sur Deployement Assembly. cliquez sur ajouter cliquez sur "Entrées du chemin de construction Java" sélectionnez Dépendances Maven "cliquez sur Terminer.

Vishal Thakur
la source
1

Cela peut être utile pour quelqu'un, je vais donc le poster ici. Il me manquait cette dépendance à monpom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
luizfzs
la source
1
  1. Accédez aux propriétés du projet sur lesquelles vous travaillez
  2. Choisissez le menu Assemblage de déploiement et cliquez sur le bouton Ajouter
  3. choisissez les entrées Java Build Path et cliquez sur Maven Dependencies
  4. Construisez le projet et exécutez

entrez la description de l'image ici

Lova Chittumuri
la source
1
Je n'ai pas l'option Dépendances Maven lorsque je clique sur les entrées du chemin de construction Java.
Muktadir Khan le
je ne savais pas dans quel aspect vous posiez cette question. Veuillez essayer de publier une nouvelle question.
Lova Chittumuri le
0

J'ai résolu en suivant ces étapes:

  • Faites un clic droit dans le projet> Configurer> Convertir en projet Maven
  • Après la conversion, faites un clic droit dans le projet> Maven> Mettre à jour le projet

Cela corrige les paramètres «Deployment Assembly» du projet.

Leo
la source
0

Déplacez les fichiers jar de votre chemin de classe vers web-inf / lib et exécutez un nouveau serveur tomcat.

ajai kumar
la source
0

J'ai trouvé une solution simple, ajoutez simplement vos jars dans le dossier WEB-INF -> lib.

Karthik
la source
0

J'ai eu ce même problème dans WebSphere, mais je n'ai pas pu trouver de solution même si j'ai vérifié que les dépendances de Spring étaient là et que cela fonctionnait très bien dans tomcat. J'ai fini par désinstaller l'application et j'obtenais toujours l'erreur, donc je pense que WebSphere s'accrochait à une instance corrompue.

Pour résoudre le problème, j'ai dû réinstaller l'application, l'arrêter, la désinstaller, puis la réinstaller.

flip66
la source
0

Pour moi, c'était une erreur dans le pom.xml- j'avais mis <scope>provided<scope>sur mes dépendances, et cela empêchait de les copier pendant la mvn packagescène.

Mes symptômes étaient le message d'erreur publié par l'OP et le fait que les fichiers JAR n'étaient pas inclus dans le chemin WEB-INF / lib à l'intérieur du .war après l'exécution du package. Lorsque j'ai supprimé la portée, les jars sont apparus dans la sortie, et tout se charge bien maintenant.

Dan Rayson
la source