Le contexte d'application étendu de l'application Web est conçu pour fonctionner avec le contexte standard de l'application Web. javax.servlet.ServletContext 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 est possible de faire beaucoup de choses avec l'instance ServletContext, par exemple accéder aux ressources WEB-INF (configs xml, etc.) en appelant la méthode getResourceAsStream(). Généralement, tous les contextes d'application définis dans le fichier web.xml d'une application Spring à base de servlets sont des contextes d'application Web, ce qui vaut aussi bien pour le contexte webapp racine que pour le contexte app de la servlet.
De plus, le fait de dépendre des capacités du contexte de l'application web peut rendre votre application un peu plus difficile à tester, et vous devrez peut-être utiliser MockServletContext pour les tests.
Différence entre servlet et contexte Root Spring vous permet de construire des hiérarchies de contexte d'application à plusieurs niveaux, de sorte que le bean requis sera récupéré dans le contexte parent s'il n'est pas présent dans le contexte d'application actuel. Dans les applications Web, il existe par défaut deux niveaux de hiérarchie, les contextes Root et Servlet : .
Cela vous permet d'exécuter certains services en tant que singletons pour l'ensemble de l'application (les beans de sécurité de Spring et les services d'accès aux bases de données de base résident généralement ici) et d'autres 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 existe d'emblée lorsque vous utilisez les classes de servlets de Spring : pour configurer le contexte d'application Root, vous devez utiliser les éléments suivants Paramètre de contexte 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 servlet pour les contextes d'application des servlets
<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 est omis, alors spring utilisera myservlet-servlet.xml dans cet exemple.
Voir aussi : Différence entre applicationContext.xml et spring-servlet.xml dans Spring Framework
9 votes
Je ne pense pas qu'il s'agisse d'un doublon de stackoverflow.com/questions/3652090/ Cette question porte sur le contenu de la
web.xml
Cette question porte sur certaines classes de Spring.0 votes
@Raedwald ce n'est pas vrai. L'autre question ne parle pas de
web.xml
mais il s'agit de la configuration des variantes de Spring XML bean deApplicationContext
yWebApplicationContext
. Toutes les définitions de haricots dansapplicationContext.xml
sera disponible dans leApplicationContext
alors que toutes les définitions de haricots dans*-servlet.xml
sera disponible dans unWebApplicationContext
.