93 votes

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 éclipse indigo et la jarre spring-webmvc-3.1.0.RELEASE.jar qui contient le DispatcherServlet existe dans le dossier lib, et pourtant, lorsque je lance l'application, j'obtiens l'exception suivante :

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 m'indiquer pourquoi je reçois cette exception et comment la corriger.

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>

De plus, lorsque j'essaie d'accéder à n'importe quelle page de l'application, j'obtiens l'exception suivante :

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

257voto

krakos Points 351

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

  • cliquez à droite sur votre projet et choisissez les propriétés.
  • cliquez sur Deployment Assembly.
  • cliquez pour ajouter
  • cliquez sur "Java Build Path Entries" (entrées du chemin de construction de Java)
  • sélectionner les dépendances de Maven"
  • cliquez sur Terminer.

Reconstruire et déployer à nouveau

Note : Ceci est également applicable pour non maven projet.

36voto

Rexxo Points 191

Deux réponses possibles :

1- Vous n'avez pas inclus les jarres spring-beans et spring-context dans votre lib. Si vous utilisez maven (ce qui vous aidera beaucoup), ces deux lignes seront suffisantes.

<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.

19voto

Adio Points 1712

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 de 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 l'idée Intellij, vous devez aller dans Fichier -> Paramètres du projet -> Artifacts.

Puis enter image description here

nettoyer -> reconstruire le projet -> construire l'artefact, et tout sera ok.

13voto

Lycone Points 71

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

Étape 1

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

Étape 2

  • Cliquez sur l'onglet "Deployment Assembly" dans la fenêtre
  • Cliquez sur Ajouter...

Paso 3

  • Cliquez sur les entrées de Java Build Path

Paso 4

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

Étape 5

  • Redéployer l'application Spring MVC vers Tomcat à nouveau
  • Redémarrer Tomcat
  • Élément de liste

exception de classe non trouvée

11voto

MahmoudS Points 6654

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

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

Je l'ai supprimé, et j'ai ajouté le maven dependencies et cela fonctionne bien maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X