Pourquoi ne Spring MVC besoin d'au moins deux contextes?
Dans Spring MVC, il y a deux contextes. L'un est le contexte de l'application ou du contexte mondial qui est démarré par ContextLoaderListener
. Il prend tous les fichiers de configuration mentionnés dans contextConfigLocation
paramètre.
Maintenant, si vous êtes à l'aide de Spring MVC, le Répartiteur de la servlet est nécessaire, qui démarre dans un autre récipient, qui est également connu comme conteneur d'applications web. Ce conteneur prend le conteneur global en tant que parent.
Lors de l'intégration de struts1 avec le printemps, il y a un seul contexte. Pourquoi ne spring mvc besoin de deux? Est-il possible d'utiliser un seul contexte lors de l'utilisation de spring mvc?
merci!
Vous devez vous connecter pour publier un commentaire.
Imaginez que vous avez deux Répartiteurs, chacun ayant un but différent, et chacun ayant ses propres dépendances. Vous devez configurer ces applications de manière indépendante à l'aide de contextes différents.
Si il n'y a aucune configuration partagée, ce qui peut aller dans le "contexte global'.
Je ne pense pas que c'est possible d'avoir un seul contexte à l'aide de DispatcherServlet, car elle crée son propre contexte et les liens avec le contexte parent (via le FrameworkServlet superclasse).
FrameworkServlet.createWebApplicationContext
Avoir un site web racine de contexte de l'application, plus un enfant servlet contexte est juste une option. Si vous savez que votre application n'avez pas une seconde servlet, c'est sans doute plus simple d'avoir un seul et unique Ressort de contexte pour l'ensemble de l'application web.
Vous pouvez obtenir le programme d'installation, simplement en retirant la
ContextLoaderListener
(et de l'accompagnement descontextConfigLocation
context-param) à partir de votreweb.xml
et le déplacement de toutes les bean définitions dans le xml définissant le contexte de servlet ([servlet-name]-servlet.xml
).C'est possible, parce que le
FrameworkServlet
(super-classe deDispatcherServlet
) ne se soucie pas si il y a une racine de contexte de l'application lors de la création de la servlet contexte. Il vient de relais le contexte de la racine en tant que parent, si disponible. Voir le code lié ici.Vérifier cette réponse Sur plusieurs conteneurs dans le cadre du printemps
Oui ,vous pouvez avoir un contexte seulement.
Pour la réutilisation du code, il serait préférable d'isoler des services dans le Contexte de l'Application, plutôt que de WebApplicationContext.mais ce n'est pas par la contrainte.vous pouvez ne garder que webApplicationcontext seulement.