Quelle est la différence entre le contexte d'application et le contexte d'application Web?
Je sais que cela WebApplicationContext
est utilisé pour les applications orientées architecture Spring MVC?
Je veux savoir à quoi sert les ApplicationContext
applications MVC? Et dans quel type de haricots sont définis ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
la source
la source
web.xml
fichier; cette question concerne certains cours de printemps.web.xml
mais il s'agit des variantes de configuration du bean XML Spring deApplicationContext
etWebApplicationContext
. Toutes les définitions de bean dansapplicationContext.xml
seront disponibles dans leApplicationContext
tandis que toutes les définitions de bean dans*-servlet.xml
seront disponibles dans aWebApplicationContext
.Réponses:
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.
Les beans, instanciés dans WebApplicationContext pourront également utiliser ServletContext s'ils implémentent l'interface ServletContextAware
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
(le contexte de l'application racine est créé par ContextLoaderListener qui est déclaré dans web.xml
) et la balise servlet pour les contextes d'application de 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
la source
Pour en revenir aux jours Servlet, web.xml ne peut en avoir qu'un
<context-param>
, donc un seul objet de contexte est créé lorsque le serveur charge une application et que les données de ce contexte sont partagées entre toutes les ressources (Ex: Servlets et JSP). C'est la même chose que d'avoir le nom du pilote de base de données dans le contexte, qui ne changera pas. De la même manière, lorsque nous déclarons le paramètre contextConfigLocation dans<contex-param>
Spring crée un objet Contexte d'application.Vous pouvez avoir plusieurs servlets dans une application. Par exemple, vous voudrez peut-être gérer les demandes / secure / * d'une manière et / non-seucre / * d'une autre manière. Pour chacun de ces servlets, vous pouvez avoir un objet contextuel, qui est un WebApplicationContext.
la source
La réponse acceptée est terminée mais il y a une explication officielle à ce sujet:
Par ailleurs, le servlet et le contexte racine sont tous deux webApplicationContext:
la source
ApplicationContext (Root Application Context): chaque application Web Spring MVC possède un fichier applicationContext.xml qui est configuré comme racine de la configuration du contexte. Spring charge ce fichier et crée un ApplicationContext pour l'ensemble de l'application. Ce fichier est chargé par ContextLoaderListener qui est configuré en tant que paramètre de contexte dans le fichier web.xml. Et il n'y aura qu'un seul applicationContext par application web.
WebApplicationContext: WebApplicationContext est un contexte d'application Web, c'est-à-dire qu'il contient des informations de contexte de servlet. Une seule application Web peut avoir plusieurs WebApplicationContext et chaque servlet Dispatcher (qui est le contrôleur frontal de l'architecture Spring MVC) est associé à un WebApplicationContext. Le fichier de configuration webApplicationContext * -servlet.xml est spécifique à un DispatcherServlet. Et comme une application Web peut avoir plusieurs servlets de répartiteur configurés pour répondre à plusieurs demandes, il peut y avoir plusieurs fichiers webApplicationContext par application Web.
la source
Le contexte d'application Web , spécifié par l'
WebApplicationContext
interface, est un contexte d'application Spring pour une application Web. Il possède toutes les propriétés d'un contexte d'application Spring normal, étant donné que l'WebApplicationContext
interface étend l'ApplicationContext
interface et ajoute une méthode pour récupérer l'API Servlet standardServletContext
pour l'application Web.En plus des étendues standard du bean Spring
singleton
etprototype
, trois étendues supplémentaires sont disponibles dans un contexte d'application Web:request
- étend une définition de bean unique au cycle de vie d'une seule requête HTTP; c'est-à-dire que chaque requête HTTP a sa propre instance d'un bean créé à l'arrière d'une définition de bean uniquesession
- étend une définition de bean unique au cycle de vie d'une session HTTPapplication
- étend une définition de bean unique au cycle de vie d'unServletContext
la source