Beheben Sie den Fehler Java.Lang.ClassNotFoundException: Org.Springframework.Web.Context.ContextLoaderListener in Java
Heute lernen wir den Fehler org.springframework.web.context.ContextLoaderListener
in Java kennen. Wie der Name schon sagt, geschieht dies zur Laufzeit.
Wir werden auch den Grund für diesen Fehler ermitteln, was zu verschiedenen möglichen Lösungen führt.
Voraussetzungen
Für dieses Tutorial verwenden wir die folgenden Tools und Technologien.
- Apache Tomcat 9.0
- Spring-MVC-Framework 3.1
- Java8
- Apache NetBeans 14 (Sie können NetBeans oder Eclipse verwenden)
Fehlerdemonstration, Gründe und Lösungen
Beispielcode (unser Projekt hat die folgende web.xml
-Datei):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
Beispielcode (unser Projekt hat folgende Abhängigkeiten in der pom.xml
):
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Das Projekt schlägt beim Start fehl und führt zu folgendem Fehler.
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
Um das Problem herauszufinden, das zu diesem Fehler führt, wollen wir verstehen, was der ContextLoaderListener
ist und warum wir ihn verwenden.
Der ContextLoaderListener
ist ein wichtiger Bestandteil des Spring
-MVC-Frameworks. Wahrscheinlich ist es das Wichtigste nach DispatcherServlet
selbst.
Es gehört zum Paket org.springframework.web.context
. Wir verwenden es in Spring
-Webanwendungen, um einen root
-Kontext zu erstellen.
Außerdem ist es für das Laden von Beans verantwortlich, die von vielen DispatcherServlet
geteilt werden. Im Allgemeinen verwenden wir zwei Anwendungskontexte, DispatcherServlet
und ContextLoaderListener
, während wir eine Spring
MVC-basierte Web-App entwickeln.
Hier wird das DispatcherServlet
verwendet, um webkomponentenspezifische Beans zu laden, zum Beispiel Controller, View, Handler-Mappings usw., während der ContextLoaderListener
verwendet wird, um Data-Tier- und Middle-Tier-Beans zu laden, die das Back-End der Spring
-Anwendung.
Denken Sie daran, dass der ContextLoaderListener
genau wie der andere Servlet
-Listener ist, der im Bereitstellungsdeskriptor (auch bekannt als web.xml
) deklariert werden muss, um auf die Ereignisse zu hören. Die Implementierung von ServletContextListener
lauscht nur auf das Herunterfahren und Hochfahren des Servers und erstellt/zerstört auch die von Spring
verwalteten Beans.
Bemerkenswert ist, dass wir den ContextLoaderListener
in einer Datei namens web.xml
konfigurieren, während wir eine Spring
-MVC-App erstellen. Wenn Sie Spring 3.1
und Spring 3.0
verwenden, dann können wir es ohne Deployment Descriptor konfigurieren, sondern nur Java-Konfigurationen.
An dieser Stelle kennen wir die Verwendung von ContextLoaderListener
und haben uns bei Bedarf in der web.xml
registriert. Warum erhalten wir nun den Fehler java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
?
Grund für das Erhalten des ContextLoaderListener
-Fehlers
Wir erhalten diesen Fehler, weil wir das MVC-Framework Spring
verwenden, um unsere Java-Web-App zu entwickeln, und den ContextLoaderListener
als Listener in unserer Deployment-Beschreibung (Datei web.xml
) konfigurieren, aber ein jar
, das diese class
nicht im CLASSPATH
der Webapplikation aufgeführt.
Also, wie kann man das lösen? Siehe folgenden Abschnitt.
Mögliche Lösungen zur Behebung des ContextLoaderListener
-Fehlers
Es gibt eine Reihe von Möglichkeiten, die wir verwenden können, um den Fehler java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
zu beheben, die Sie je nach Situation und Projektanforderungen verwenden können.
-
Die
web.xml
ist eine wichtige Datei bei der Arbeit mit demSpring
-MVC-Framework, da sie für das Laden unsererSpring
-Konfigurationsdateien verantwortlich ist, beispielsweisedispatcher-servlet.xml
undapplication-context.xml
. Stellen Sie sicher, dass Sie darin denContextLoadListener
wie folgt registriert haben:<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
-
Wenn das Projekt die
Spring
-Framework-Version 3.0 verwendet, müssen wirspring-web.jar
zumCLASSPATH
hinzufügen. Durch das Hinzufügen in denCLASSPATH
meinen wir, dass wir das in den OrdnerWEB-INF/lib
legen. -
Wenn das Projekt die
Spring
-Framework-Version 2.0 oder niedriger verwendet, müssen wir diespring.jar
-Datei in denWEB-INF/lib
-Ordner legen, was bedeutet, dass wir diese Datei zu unserem hinzufügenCLASSPATH
der App. -
Wenn wir die Datei
spring-web.jar
oderspring.jar
bereits hinzugefügt haben, basierend auf der von uns verwendetenSpring
-Version.Dann tritt der Fehler höchstwahrscheinlich auf, weil
CLASSPATH
falsch konfiguriert wurde. Überprüfe das noch einmal und korrigiere es. -
Wenn wir mit Maven arbeiten, müssen wir die folgende Maven-Abhängigkeit in unserer
pom.xml
hinzufügen. Das war in unserem Fall der Grund.<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.0.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency>
Wir fügen diese Abhängigkeit hinzu, weil sie der Kern-
HTTP
-Integration dient, um sie mit anderenHTTP
-Technologien und Web-Frameworks zu integrieren. Einige von uns haben vielleichtspring-webmvc
, was auch in Ordnung ist.Das
spring-webmvc
ist die Implementierung vonSpring
MVC; es kommt auf dasspring-web
an. Das Einschließen vonspring-webmvc
schließt also transitivspring-web
ein; wir müssen das nicht explizit hinzufügen.Wir können das
spring-webmvc
wie folgt hinzufügen:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.1.0.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency>
-
Wenn Sie Eclipse-freundlich sind und diesen Fehler erhalten, während Sie Eclipse und Tomcat verwenden. Dann müssen Sie einige einfache Schritte ausführen, um sicherzustellen, dass der
CLASSPATH
Maven-Abhängigkeiten enthält.Außerdem sind sie für den Klassenlader der Webanwendung von Tomcat sichtbar. Sie müssen nur die folgenden Schritte ausführen.
- Wählen Sie das Projekt aus. Klicken Sie mit der rechten Maustaste darauf und wählen Sie
Eigenschaften
. - Wählen Sie auf der linken Seite des Fensters
Deployment Assembly
aus. Sie können auch hierher kommen, indem Sie das Projekt auswählen, mit der rechten Maustaste darauf klicken undBuild Path
>Configure Build Path
auswählen. - Wählen Sie dann
Bereitstellungsmontage
. Sie können jede Option verwenden, um hierher zu gelangen. - Klicken Sie auf die Schaltfläche
Hinzufügen
. Es ist auf der rechten Seite des Fensters verfügbar. - Sobald Sie auf die Schaltfläche
Hinzufügen
geklickt haben, sehen Sie ein neues Fenster. Wählen Sie dortJava Build Path Entries
und klicken Sie aufNext
. - Wählen Sie im Menü
Java Build Path Entries
dieMaven Dependencies
und klicken Sie dann aufFinish
.
- Wählen Sie das Projekt aus. Klicken Sie mit der rechten Maustaste darauf und wählen Sie
Wir werden Maven-Abhängigkeiten sehen, die der Webbereitstellungs-Assembly-Definition hinzugefügt wurden, sobald alle Schritte erfolgreich durchgeführt wurden.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse