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.xmlist eine wichtige Datei bei der Arbeit mit demSpring-MVC-Framework, da sie für das Laden unsererSpring-Konfigurationsdateien verantwortlich ist, beispielsweisedispatcher-servlet.xmlundapplication-context.xml. Stellen Sie sicher, dass Sie darin denContextLoadListenerwie 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.jarzumCLASSPATHhinzufügen. Durch das Hinzufügen in denCLASSPATHmeinen wir, dass wir das in den OrdnerWEB-INF/liblegen.
- 
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ügenCLASSPATHder App.
- 
Wenn wir die Datei spring-web.jaroderspring.jarbereits hinzugefügt haben, basierend auf der von uns verwendetenSpring-Version.Dann tritt der Fehler höchstwahrscheinlich auf, weil CLASSPATHfalsch 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.xmlhinzufügen. Das war in unserem Fall der Grund.
```xml
<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 anderen `HTTP`-Technologien und Web-Frameworks zu integrieren. Einige von uns haben vielleicht `spring-webmvc`, was auch in Ordnung ist.
Das `spring-webmvc` ist die Implementierung von `Spring` MVC; es kommt auf das `spring-web` an. Das Einschließen von `spring-webmvc` schließt also transitiv `spring-web` ein; wir müssen das nicht explizit hinzufügen.
Wir können das `spring-webmvc` wie folgt hinzufügen:
```xml
<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 CLASSPATHMaven-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 Assemblyaus. Sie können auch hierher kommen, indem Sie das Projekt auswählen, mit der rechten Maustaste darauf klicken undBuild Path>Configure Build Pathauswä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ügengeklickt haben, sehen Sie ein neues Fenster. Wählen Sie dortJava Build Path Entriesund klicken Sie aufNext.
- Wählen Sie im Menü Java Build Path EntriesdieMaven Dependenciesund 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
