web-dev-qa-db-fra.com

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

j'utilise spring 3.1.0.RELEASE, et mon conteneur de servlets est Tomcat 7 et mon IDE est Eclipse Indigo et le pot spring-webmvc -3.1.0.RELEASE.jar qui contient le DispatcherServlet Existe dans le dossier lib, et pourtant, lors de l'exécution de 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)

s'il vous plaît expliquer 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
80
Mahmoud Saleh

j'ai trouvé que dans deployment Assembly, il y avait l'entrée:

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

je l'ai enlevé et ajouté l'entrée maven dependencies, et tout fonctionne bien maintenant.

10
Mahmoud Saleh

Vous devez ajouter la "dépendance Maven" dans l'assemblage de déploiement.

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

Reconstruire et déployer à nouveau

Remarque: Ceci s'applique également à non maven project.

222
krakos

Deux réponses possibles:

1- Vous n'avez pas inclus les pots de haricots et de bocaux printaniers 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 fichiers JAR nécessaires se trouvent dans votre chemin de classe mais ne sont pas déployés sur Tomcat. 

28
Serkan Arıkuşu

Salut les gars, j'avais 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 Idi Intellij, vous devez aller dans Fichier -> Paramètres du projet -> Artefacts. Ensuite enter image description here

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

18
Adelin

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

Étape 1

  • Clic droit sur le projet
  • Cliquez sur Propriétés

Étape 2

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

Étape 3

  • Cliquez sur les 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 à nouveau
  • Redémarrer Tomcat
  • Élément de liste

classnotfoundexception

4
Lycone

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

4
Chinbold Gansukh

Je faisais face au même problème. Quand j'ai vu le dossier .m2 du référentiel maven (.... m2\repository\org\springframework\spring-webmvc) dans mon répertoire local, j'ai trouvé deux dossiers 3.2.0.RELEASE. SO J'ai enlevé un . Ensuite, je suis allé au projet, cliquez avec le bouton droit de la souris -> propriétés -> déploiement essembly-> ajouter des dépendances maven . Nettoyez la construction, puis redémarrez le serveur. Ensuite, le DispatcherServlet a été chargé.

4
TKS

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

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

Dans mon cas, je rencontre ce problème après avoir utilisé l'utilitaire de projet de mise à jour de maven. À la fin, la solution consistait simplement à supprimer le projet du serveur pour s'assurer qu'il était propre et à l'ajouter à nouveau. Ensuite, cela fonctionne, j'espère que cette solution pourra aider n'importe lequel d'entre vous.

2
user2947452

Vous pouvez utiliser le serveur GlassFish et l'erreur sera résolue. J'ai essayé avec Tomcat7 et Tomcat8 mais cette erreur venait continuellement, mais elle était résolue avec GlassFish. Je pense que c'est un problème avec le serveur.

Voici les résultats avec Tomcat7:  Results with Tomcat7

Voici les résultats avec GlassFish:  Results with GlassFish

2
Superb Saif

cliquez avec le bouton droit de la souris sur votre projet et choisissez Propriétés . Cliquez sur Deployement Assembly . Cliquez sur add Cliquez sur "Entrées du chemin de construction Java" Sélectionnez Dépendances Maven " Cliquez sur Terminer.

1
Vishal Thakur

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

0
Karthik

J'avais le même problème dans WebSphere, mais je n'ai pas trouvé de solution, même si j'ai vérifié que les dépendances de Spring étaient présentes et que cela fonctionnait parfaitement dans Tomcat. J'ai fini par désinstaller l'application et j'entendais toujours l'erreur. Je pense donc que WebSphere était bloqué sur une instance corrompue.

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

0
flip66

Cela peut être utile pour quelqu'un, je vais donc le poster ici . Il me manquait cette dépendance sur mon pom.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>
0
luizfzs

Pour moi, c'était une erreur dans le pom.xml - Je mettrais <scope>provided<scope> dans mes dépendances, ce qui les empêcherait d'être copiées pendant l'étape mvn package.

Mes symptômes étaient le message d'erreur affiché par l'OP et le fait que les fichiers jar n'étaient pas inclus dans le chemin WEB-INF/lib dans le fichier .war après l'exécution du package. Quand j'ai enlevé la lunette, les bocaux sont apparus dans la sortie et tout se charge bien maintenant.

0
Dan Rayson

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

0
ajai kumar

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

  • Faites un clic droit dans le projet> Configurer> Convertir en projet Maven
  • Après la conversion, cliquez avec le bouton droit de la souris sur le projet> Maven> Mettre à jour le projet.

Cela corrige les paramètres "Assemblée de déploiement" du projet.

0
leo