Webanwendungskontext erweitert Anwendungskontext, der für die Verwendung mit dem Standard javax.servlet.ServletContext ausgelegt ist, damit er mit dem Container kommunizieren kann.
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
In WebApplicationContext instanziierte Beans können auch ServletContext verwenden, wenn sie die ServletContextAware-Schnittstelle implementieren
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
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
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
(Der Stammanwendungskontext wird von ContextLoaderListener erstellt, der in web.xml deklariert ist
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) und Servlet- Tag für die Servlet-Anwendungskontexte
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>app-servlet.xml</param-value>
</init-param>
</servlet>
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
web.xml
Datei. Diese Frage bezieht sich auf einige Frühlingsklassen.