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
Mahmoud Saleh
quelle
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.

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

Serkan Arıkuşu
quelle
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 ...

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

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

Mahmoud Saleh
quelle
5

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

Chinbold Gansukh
quelle
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>
Sieger
quelle
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.

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

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

Superb Saif
quelle
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.

Vishal Thakur
quelle
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>
luizfzs
quelle
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

Lova Chittumuri
quelle
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.

Löwe
quelle
0

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

Ajai Kumar
quelle
0

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

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

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

Dan Rayson
quelle