Spring MVC – Anwendungskontext vs. Webanwendungskontext

Für Spring-Entwickler ist es wichtig, den Unterschied zwischen ApplicationContext und WebApplicationContext zu verstehen. Im Spring Framework stehen verschiedene Kontextnamen zur Verfügung, die je nach Art der Anwendung verwendet werden. Die häufigste Unklarheit ist auf die zwei unterschiedlichen Kontextkonfigurationsdateien zurückzuführen, die zum Konfigurieren der Spring-Anwendungen verwendet werden. Entwicklern stellt sich die Frage, warum wir zwei verschiedene Kontextkonfigurationsdateien benötigen und wann diese Dateien vom Spring-Container geladen werden. Dieses Tutorial fasst einige wichtige Fakten zu beiden Kontextkonfigurationsdateien zusammen.

lesen Sie auch:

  • Frühlings- und Ruhezustandsintegration
  • Frühlingsaspektorientierte Programmierung
  • Spring MVC – Komponentenscan vs. Annotation-Config vs. annotationsgesteuert

Die Spring-Anwendung verfügt über zwei Arten von Kontextkonfigurationsdateien für das Spring MVC-Modul:

  • ApplicationContext (Standardname für diese Datei ist applicationContext.xml)
  • WebApplicationContext (Standardname für diese Datei ist xxx-servlet.xml, wobei xxx der DispatcherServlet-Name in web.xml ist)
  • Anwendungskontext

    • applicationContext.xml ist die Root-Kontextkonfiguration für jede Webanwendung.
    • Spring lädt die Datei applicationContext.xml und erstellt den ApplicationContext für die gesamte Anwendung.
    • Pro Webanwendung gibt es nur einen Anwendungskontext.
    • Wenn Sie den Namen der Kontextkonfigurationsdatei in web.xml nicht explizit mit dem Parameter contextConfigLocation deklarieren, sucht Spring nach applicationContext.xml im Ordner WEB-INF und löst eine FileNotFoundException aus, wenn diese Datei nicht gefunden werden konnte.

    WebApplicationContext

    • Außer, abgesondert, ausgenommen Anwendungskontextes kann mehrere geben WebApplicationContext in einer einzigen Webanwendung.
    • Mit einfachen Worten: Jedes DispatcherServlet ist einem einzelnen WebApplicationContext zugeordnet.
    • Die Datei xxx-servlet.xml ist spezifisch für das DispatcherServlet und eine Webanwendung kann über mehr als ein DispatcherServlet verfügen, das für die Verarbeitung der Anforderungen konfiguriert ist.
    • In solchen Szenarien wäre für jedes DispatcherServlet eine separate xxx-servlet.xml konfiguriert. applicationContext.xml ist jedoch für alle Servlet-Konfigurationsdateien gleich.
    • Spring lädt standardmäßig die Datei „xxx-servlet.xml“ aus dem WEB-INF-Ordner Ihrer Webapps, wobei xxx der Servlet-Name in web.xml ist.
    • Wenn Sie den Namen dieser Datei oder den Speicherort ändern möchten, fügen Sie initi-param mit contextConfigLocation als Parameternamen hinzu.

    ContextLoaderListener

    • Führt die eigentliche Initialisierungsarbeit für den Root-Anwendungskontext durch.
    • Liest einen „contextConfigLocation“-Kontextparameter und übergibt seinen Wert an die Kontextinstanz und analysiert ihn in potenziell mehrere Dateipfade, die durch eine beliebige Anzahl von Kommas und Leerzeichen getrennt werden können, z. B. „WEB-INF/applicationContext1.xml, WEB-INF/“ applicationContext2.xml“.
    • ContextLoaderListener ist optional. Um es hier nur zu verdeutlichen: Sie können eine Spring-Anwendung starten, ohne jemals ContextLoaderListener zu konfigurieren, sondern lediglich eine grundlegende web.xml-Datei mit DispatcherServlet.

    Beispieldatei web.xml mit Konfigurationen:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      	<display-name>Spring MVC</display-name>
    
         <!-- This is the root application context for whole web application. -->
        <context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/rootApplicationContext.xml</param-value>
    	</context-param>
    	  <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
      <servlet>
            <servlet-name>webmvc1</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    
            <!-- We require this configuration when we want to change the default name / location of the servlet specific configuration files -->
            <init-param>
            	<param-name>contextConfigLocation</param-name>
            	<param-value>/WEB-INF/mvc1-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
      	<servlet>
            <servlet-name>webmvc2</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
    
            <!-- We require this configuration when we want to change the default name / location of the servlet specific configuration files -->
            <init-param>
            	<param-name>contextConfigLocation</param-name>
            	<param-value>/WEB-INF/mvc2-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
         <servlet-mapping>
            <servlet-name>webmvc1</servlet-name>
            <url-pattern>/webmvc1</url-pattern>
        </servlet-mapping>
            <servlet-mapping>
            <servlet-name>webmvc2</servlet-name>
            <url-pattern>/webmvc2</url-pattern>
        </servlet-mapping>
    </web-app>
    

    Kommentar verfassen

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Nach oben scrollen