Was ist der Unterschied zwischen Anwendungskontext und Webanwendungskontext?
Mir ist bekannt, dass WebApplicationContext
für Spring MVC Architektur-orientierte Anwendungen verwendet wird?
Ich möchte wissen, was ApplicationContext
in MVC-Anwendungen verwendet wird. Und in welcher Art von Bohnen ist definiert ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
quelle
quelle
web.xml
Datei. Diese Frage bezieht sich auf einige Frühlingsklassen.web.xml
um die Spring XML Bean-Konfigurationsvarianten vonApplicationContext
undWebApplicationContext
. Alle Bean-Definitionen inapplicationContext.xml
sind in verfügbar,ApplicationContext
während alle Bean-Definitionen in*-servlet.xml
in verfügbar sindWebApplicationContext
.Antworten:
Webanwendungskontext erweitert Anwendungskontext, der für die Verwendung mit dem Standard javax.servlet.ServletContext ausgelegt ist, damit er mit dem Container kommunizieren kann.
In WebApplicationContext instanziierte Beans können auch ServletContext verwenden, wenn sie die ServletContextAware-Schnittstelle implementieren
Mit der ServletContext-Instanz können viele Dinge getan werden, z. B. der Zugriff auf WEB-INF-Ressourcen (XML-Konfigurationen usw.) durch Aufrufen der Methode getResourceAsStream (). In der Regel sind alle in web.xml in einer Servlet Spring-Anwendung definierten Anwendungskontexte Webanwendungskontexte. Dies gilt sowohl für den Stamm-Webapp-Kontext als auch für den App-Kontext des Servlets.
Abhängig vom Kontext der Webanwendung kann es außerdem schwieriger sein, Ihre Anwendung zu testen, und Sie müssen möglicherweise die MockServletContext- Klasse zum Testen verwenden.
Unterschied zwischen Servlet- und Root-Kontext Mit Spring können Sie mehrstufige Anwendungskontexthierarchien erstellen, sodass die erforderliche Bean aus dem übergeordneten Kontext abgerufen wird, wenn sie im aktuellen Anwendungskontext nicht vorhanden ist. In Webanwendungen gibt es standardmäßig zwei Hierarchieebenen: Root- und Servlet-Kontexte : .
Auf diese Weise können Sie einige Dienste als Singletons für die gesamte Anwendung ausführen (Spring Security-Beans und grundlegende Datenbankzugriffsdienste befinden sich normalerweise hier) und andere als separate Dienste in den entsprechenden Servlets, um Namenskonflikte zwischen Beans zu vermeiden. Beispielsweise wird ein Servlet-Kontext die Webseiten bedienen und ein anderer wird einen zustandslosen Webdienst implementieren.
Diese Trennung auf zwei Ebenen ist sofort einsatzbereit, wenn Sie die Spring-Servlet-Klassen verwenden: Um den Kontext der Stammanwendung zu konfigurieren, sollten Sie in Ihrer web.xml das Tag context-param verwenden
(Der Stammanwendungskontext wird von ContextLoaderListener erstellt, der in web.xml deklariert ist
) und Servlet- Tag für die Servlet-Anwendungskontexte
Bitte beachten Sie, dass spring in diesem Beispiel myservlet-servlet.xml verwendet, wenn init-param weggelassen wird.
Siehe auch: Unterschied zwischen applicationContext.xml und spring-servlet.xml in Spring Framework
quelle
Zurück zu den Servlet-Tagen kann web.xml nur eines haben
<context-param>
, sodass nur ein Kontextobjekt erstellt wird, wenn der Server eine Anwendung lädt und die Daten in diesem Kontext von allen Ressourcen gemeinsam genutzt werden (Beispiel: Servlets und JSPs). Dies entspricht dem Namen des Datenbanktreibers im Kontext, der sich nicht ändert. In ähnlicher Weise wird beim Deklarieren des Parameters contextConfigLocation in<contex-param>
Spring ein Anwendungskontextobjekt erstellt.Sie können mehrere Servlets in einer Anwendung haben. Beispielsweise möchten Sie möglicherweise / Secure / * -Anfragen auf eine Weise und / non-seucre / * auf eine andere Weise behandeln. Für jedes dieser Servlets können Sie ein Kontextobjekt haben, bei dem es sich um einen WebApplicationContext handelt.
quelle
Die akzeptierte Antwort ist durch, aber es gibt eine offizielle Erklärung dazu:
Übrigens sind Servlet und Root-Kontext beide webApplicationContext:
quelle
ApplicationContext (Stammanwendungskontext): Jede Spring MVC-Webanwendung verfügt über eine applicationContext.xml-Datei, die als Stamm der Kontextkonfiguration konfiguriert ist. Spring lädt diese Datei und erstellt einen applicationContext für die gesamte Anwendung. Diese Datei wird vom ContextLoaderListener geladen, der als Kontextparameter in der Datei web.xml konfiguriert ist. Und es wird nur einen applicationContext pro Webanwendung geben.
WebApplicationContext: WebApplicationContext ist ein webfähiger Anwendungskontext, dh er enthält Servlet-Kontextinformationen. Eine einzelne Webanwendung kann mehrere WebApplicationContext enthalten, und jedes Dispatcher-Servlet (das der Front-Controller der Spring MVC-Architektur ist) ist einem WebApplicationContext zugeordnet. Die Konfigurationsdatei web-ApplicationContext * -servlet.xml ist spezifisch für ein DispatcherServlet. Da für eine Webanwendung mehr als ein Dispatcher-Servlet konfiguriert sein kann, um mehrere Anforderungen zu bedienen, kann es pro Webanwendung mehr als eine webApplicationContext-Datei geben.
quelle
Der von der
WebApplicationContext
Schnittstelle angegebene Webanwendungskontext ist ein Spring-Anwendungskontext für Webanwendungen. Es verfügt über alle Eigenschaften eines regulären Spring-Anwendungskontexts, vorausgesetzt, dieWebApplicationContext
Schnittstelle erweitert dieApplicationContext
Schnittstelle und fügt eine Methode zum Abrufen der Standard-Servlet-APIServletContext
für die Webanwendung hinzu.Zusätzlich zu den Standardbereichen von Spring Bean
singleton
undprototype
stehen in einem Webanwendungskontext drei zusätzliche Bereiche zur Verfügung:request
- legt eine einzelne Bean-Definition auf den Lebenszyklus einer einzelnen HTTP-Anforderung fest; Das heißt, jede HTTP-Anforderung verfügt über eine eigene Instanz einer Bean, die auf der Rückseite einer einzelnen Bean-Definition erstellt wurdesession
- legt eine einzelne Bean-Definition auf den Lebenszyklus einer HTTP-Sitzung festapplication
- legt eine einzelne Bean-Definition auf den Lebenszyklus von aServletContext
quelle