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


87

Ich verwende Spring 3.1.0.RELEASE und mein Servlet-Container ist Tomcat 7 und meine IDE ist Eclipse Indigo und das JAR spring-webmvc-3.1.0.RELEASE.jar, das das DispatcherServlet enthält, ist im lib-Ordner vorhanden, und doch wann Beim Ausführen der Anwendung erhalte ich die Ausnahme:

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)

Bitte geben Sie an, warum ich diese Ausnahme erhalte und wie Sie sie beheben können.

BEARBEITEN: Folgendes sind meine Konfigurationsdateien:

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>

Auch wenn ich versuche, auf eine Seite in der Anwendung zuzugreifen, erhalte ich die Ausnahme:

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

Können Sie Ihre Spring-Konfigurationsdateien veröffentlichen und uns mitteilen, auf welchem ​​App-Server er ausgeführt werden soll?
Gergely Szilagyi

@Gergely Szilagyi, ich habe die Frage aktualisiert.
Mahmoud Saleh

hat meine Antwort gelöscht, weil sie nicht nützlich war. Entschuldigung :(
Gergely Szilagyi

@ iNan, ich benutze Eclipse Indigo
Mahmoud Saleh

1
Ich glaube, es ist nicht direkt ein CNF auf DispatcherServlet, aber eine abhängige Klasse hat einen Fehler ausgelöst. Überprüfen Sie, ob Sie eine andere verschachtelte Ausnahme sehen.
Adarshr

Antworten:


246

Sie müssen die "Maven-Abhängigkeit" in der Bereitstellungsassembly hinzufügen

  • Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften.
  • Klicken Sie auf Deployment Assembly.
  • Klicken Sie auf Hinzufügen
  • Klicken Sie auf "Java Build Path Entries".
  • Maven-Abhängigkeiten auswählen "
  • Klicken Sie auf Fertig stellen.

Neu erstellen und erneut bereitstellen

Hinweis: Dies gilt auch für Nicht-Maven- Projekte.


Schön - ich war verwirrt zu sehen, auch nachdem ich die richtige Abhängigkeit in meine pom.xml hinzugefügt hatte, löste den Fehler nicht, bis ich wie oben folgte ..
srinivas

Schöne .. perfekte Lösung
Prasad VS

1
Warum funktioniert das? Ich meine, sollten nicht alle Maven-Abhängigkeiten verfügbar sein? Wenn ich das Tomcat7-Pluging mit tomcat7: run verwenden würde, wie würde dies erreicht werden?
Johnny Bigoode

Funktioniert wie Charme!
Yrazlik

Dies gilt auch für Nicht-Maven-Projekte. !! Ich habe ein Maven-Projekt erstellt und habe das gleiche Problem. Diese Lösung hat bei mir funktioniert.
Bandham Manikanta

32

Zwei mögliche Antworten:

1- Sie haben keine Spring-Beans und Spring-Context-Gläser in Ihre Bibliothek aufgenommen. Wenn Sie Maven verwenden (was sehr hilfreich ist), reichen diese beiden Zeilen aus

<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- Die erforderlichen Jars befinden sich in Ihrem Klassenpfad, werden jedoch nicht auf Tomcat bereitgestellt.


Schön, dass Sie das Problem gelöst haben, aber ich glaube nicht, dass aus Ihrem Problem hervorgeht, dass Sie Maven verwenden.
Serkan Arıkuşu

1
Maven ist in der Frage markiert!
Mahmoud Saleh

3
Hinzufügen spring-webmvczu meinem pom.xmlWillen lösen das Problem. Vielen Dank.
OO7

19

Hallo Leute, ich hatte das gleiche Problem mit Idea Intellij und Spring 4. Ich habe das Problem behoben und wollte die Antwort mit Ihnen teilen.

Ich benutze Tomcat 7 / Idea Intelligij 13 / Spring 4

pom.xml Abhängigkeiten

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

In der Idee Intellij müssen Sie zu Datei -> Projekteinstellungen -> Artefakte gehen. Dann Geben Sie hier die Bildbeschreibung ein

sauber -> Projekt neu erstellen -> Artefakt erstellen und alles wird in Ordnung sein ...


Du bist ein Genie. Können Sie erklären, welchen Unterschied es macht? Wie kommt es, dass Maven alles importiert, aber Sie müssen das noch tun, damit es funktioniert?
DMurta

@ DMurta wer hat gesagt, dass Maven alles exportiert?
Adelin

12

Dies löst das Problem für mich. Es ist einfach und ziemlich einfach zu erklären.

Schritt 1

  • Klicken Sie mit der rechten Maustaste auf das Projekt
  • Klicken Sie auf Eigenschaften

Schritt 2

  • Klicken Sie auf die Registerkarte Deployment Assembly
  • Klicken Sie auf Hinzufügen ...

Schritt 3

  • Klicken Sie auf Java Build Path Entries

Schritt 4

  • Klicken Sie auf Maven-Abhängigkeiten
  • Klicken Sie auf die Schaltfläche Fertig stellen

Schritt 5

  • Stellen Sie die Spring MVC-Anwendung erneut in Tomcat bereit
  • Starten Sie Tomcat neu
  • Listenpunkt

classnotfoundexception


Würden Sie die Note, die Sie meinem Vorschlag gegeben haben, noch einmal überdenken?
Lycone

10

Ich fand, dass in der Bereitstellungsassembly der Eintrag war:

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

Ich habe es entfernt und den maven dependenciesEintrag hinzugefügt , und es funktioniert jetzt gut.


5

Wenn all diese Ratschläge nicht funktionieren, sollten Sie Ihren Server neu erstellen (Tomcat oder ähnliches). Das hat mein Problem gelöst.


5

Fügen Sie die folgende Abhängigkeit in Ihre pom.xml ein

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

4

Ich stand vor dem gleichen Problem. Als ich in meinem lokalen Ordner den Ordner maven repository .m2 (.... m2 \ repository \ org \ springframework \ spring-webmvc) sah, fand ich zwei 3.2.0.RELEASE-Ordner. Also habe ich einen entfernt. Dann ging ich zum Projekt, Rechtsklick-> Eigenschaften-> Bereitstellungsaufbau-> Maven-Abhängigkeiten hinzufügen. Bereinigen Sie den Build und starten Sie den Server neu. Dann wurde das DispatcherServlet geladen.


Ja, dies hat auch mein Problem behoben. Gibt es eine Idee, warum es erforderlich ist, Abhängigkeiten in der Bereitstellungsassembly in Eclipse hinzuzufügen?
Freiberufler

2

In meinem Fall tritt dieses Problem auf, nachdem ich das Update-Projektdienstprogramm des Maven verwendet habe. Ich habe alle von Ihnen vorgeschlagenen Problemumgehungen ausprobiert, aber nichts schien zu funktionieren. Am Ende bestand die Lösung einfach darin, das Projekt vom Server zu entfernen, um sicherzustellen, dass es sauber ist, und es erneut hinzuzufügen. Dann funktioniert es, ich hoffe, diese Lösung könnte jedem von Ihnen helfen.


2

Sie können den GlassFish-Server verwenden und der Fehler wird behoben. Ich habe es mit tomcat7 und tomcat8 versucht, aber dieser Fehler trat ständig auf, wurde aber mit GlassFish behoben. Ich denke, es ist ein Problem mit dem Server.

Dies sind die Ergebnisse mit tomcat7: Ergebnisse mit tomcat7

Hier sind die Ergebnisse mit GlassFish: Ergebnisse mit GlassFish


1

Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften. Klicken Sie auf Deployment Assembly. Klicken Sie auf Hinzufügen. Klicken Sie auf "Java Build Path Entries". Wählen Sie Maven Dependencies aus. Klicken Sie auf Finish.


1

Es kann für jemanden nützlich sein, also werde ich es hier posten. Mir fehlte diese Abhängigkeit von meinempom.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>

1
  1. Gehen Sie zu den Eigenschaften des Projekts, an denen Sie arbeiten
  2. Wählen Sie das Menü Deployment Assembly und klicken Sie auf die Schaltfläche Hinzufügen
  3. Wählen Sie die Java Build Path Entries und klicken Sie auf Maven Dependencies
  4. Erstellen Sie das Projekt und führen Sie es aus

Geben Sie hier die Bildbeschreibung ein


Ich habe nicht die Option Maven-Abhängigkeiten, wenn ich auf Java Build Path Entries klicke.
Muktadir Khan

Ich wusste nicht, in welchem ​​Aspekt Sie diese Frage stellen. Bitte versuchen Sie eine neue Frage zu stellen.
Lova Chittumuri

0

Ich habe Folgendes gelöst:

  • Klicken Sie mit der rechten Maustaste in das Projekt> Konfigurieren> In Maven-Projekt konvertieren
  • Klicken Sie nach der Konvertierung mit der rechten Maustaste auf Projekt> Maven> Projekt aktualisieren

Dadurch werden die Einstellungen für "Deployment Assembly" des Projekts korrigiert.


0

Verschieben Sie die JAR-Dateien von Ihrem Klassenpfad nach web-inf / lib und führen Sie einen neuen Tomcat-Server aus.


0

Ich habe eine einfache Lösung gefunden: Fügen Sie einfach Ihre Gläser in den Ordner WEB-INF -> lib ein.


0

Ich hatte das gleiche Problem in WebSphere, konnte aber keine Lösung finden, obwohl ich überprüft habe, dass die Spring-Abhängigkeiten vorhanden sind und es in Tomcat einwandfrei lief. Am Ende habe ich die Anwendung deinstalliert und immer noch den Fehler erhalten, sodass WebSphere an einer beschädigten Instanz hängen blieb.

Um das Problem zu beheben, musste ich die Anwendung neu installieren, stoppen, deinstallieren und dann neu installieren.


0

Für mich war es ein Fehler in der pom.xml- ich hatte <scope>provided<scope>meine Abhängigkeiten festgelegt, und dies führte dazu, dass sie während der mvn packagePhase nicht kopiert wurden .

Meine Symptome waren die vom OP gepostete Fehlermeldung und die Tatsache, dass die Gläser nach dem Ausführen des Pakets nicht im WEB-INF / lib-Pfad in der .war enthalten waren. Als ich das Zielfernrohr entfernte, erschienen die Gläser in der Ausgabe, und jetzt wird alles gut geladen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.