Contexte d'application Web étendu Contexte d'application conçu pour fonctionner avec le javax.servlet.ServletContext standard afin qu'il puisse communiquer avec le conteneur.
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
Les beans, instanciés dans WebApplicationContext pourront également utiliser ServletContext s'ils implémentent l'interface ServletContextAware
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
Il y a beaucoup de choses possibles à faire avec l'instance ServletContext, par exemple accéder aux ressources WEB-INF (configs xml et etc.) en appelant la méthode getResourceAsStream (). En général, tous les contextes d'application définis dans web.xml dans une application Spring de servlet sont des contextes d'application Web, cela va à la fois au contexte webapp racine et au contexte d'application du servlet.
En outre, selon les capacités du contexte de l'application Web, votre application peut être un peu plus difficile à tester et vous devrez peut-être utiliser MockServletContext classe pour les tests.
Différence entre le servlet et le contexte racine
Spring vous permet de créer des hiérarchies de contexte d'application à plusieurs niveaux, de sorte que le bean requis sera extrait du contexte parent s'il n'est pas présent dans le contexte d'application actuel. Dans des applications Web par défaut , il y a deux niveaux de la hiérarchie, les contextes de racines et servlet: .
Cela vous permet d'exécuter certains services en tant que singletons pour l'application entière (les beans Spring Security et les services d'accès à la base de données de base résident généralement ici) et un autre en tant que services séparés dans les servlets correspondants pour éviter les conflits de noms entre les beans. Par exemple, un contexte de servlet servira les pages Web et un autre implémentera un service Web sans état.
Cette séparation à deux niveaux est prête à l'emploi lorsque vous utilisez les classes de servlet Spring: pour configurer le contexte de l'application racine, vous devez utiliser la balise context-param dans votre web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
(le contexte de l'application racine est créé par ContextLoaderListener qui est déclaré dans web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) et la balise servlet pour les contextes d'application de servlet
<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>
Veuillez noter que si init-param sera omis, alors spring utilisera myservlet-servlet.xml dans cet exemple.
Voir aussi: Différence entre applicationContext.xml et spring-servlet.xml dans Spring Framework
web.xml
fichier; cette question concerne certains cours de printemps.