web-dev-qa-db-fra.com

ApplicationContext et ServletContext

Je suis confus entre les deux ApplicationContext et ServletContext en ce qui concerne Spring MVC Application . Je sais qu’il n’ya qu’un seul ApplicationContext par application Web Spring et qu’un seul ServletContext par application Web. Pour initialiser la valeur à la fois pour ApplicationContext et ServletContext, dans web.xml, nous ajouterons quelque chose dans context-param tag.

C'est le point qui me rend confus. Quelles sont les différences entre ces deux (je sais que ApplicationContext a quelques méthodes pour travailler avec des haricots)? et Quand nous utiliserions ApplicationContext et Quand nous utiliserions ServletContext ?

13
Raleigh

Contexte de servlet:

Il est initialisé lorsqu'une application Servlet est déployée. Le contexte de servlet contient toutes les configurations (init-param, context-params, etc.) de l'ensemble de l'application servlet.

Contexte d'application:

C'est une chose spécifique au printemps. Il est initialisé par Spring. Il contient toutes les définitions de beans et le cycle de vie des beans définis dans les fichiers de configuration de printemps. Servlet-Context n'a aucune idée de cela.

Il existe deux types de contextes dans Printemps parent et enfant.

Contexte parent Spring (contexte d'application/contexte racine)

  <listener>
        <listener-lass> 
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/service-context.xml,
            /WEB-INF/dao-context.xml,
            /WEB-INF/was-context.xml,
            /WEB-INF/jndi-context.xml,
            /WEB-INF/json-context.xml
        </param-value>
  </context-param>

rôle-but-de-contextloaderlistener-in-spring
Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
Lorsque le conteneur printanier démarre, il lit toutes les définitions de beans à partir des fichiers de configuration, crée des objets beans et gère le cycle de vie des objets beans . Cette configuration est totalement facultative.

DispatcherServlet vs ContextLoaderListener
/déclarer-printemps-haricot-dans-contexte-parent-vs-enfant-contexte

Contexte enfant Spring (Contexte WebApplicationContext/Child)

<servlet>
    <servlet-name>myWebApplication</servlet-name>
    <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jobbuzz-web</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>

Lorsque l'application Web spring démarre, elle recherche le fichier de configuration du bean spring, myWebApplication-servlet.xml. Il lira toutes les définitions de beans et créera et gérera le cycle de vie des objets de bean. Si le contexte parent printemps est disponible, il fusionnera le contexte enfant printemps avec le contexte parent parent. S'il n'y a pas de contexte parent Spring disponible, l'application n'aura que le contexte enfant Spring.

16
ParagFlume

Ce sont des choses séparées. Toutes les applications Web Java basées sur la technologie Servlet auront un contexte de servlet , qu’il s’agisse d’une application printanière ou non. En revanche, le ApplicationContext est une chose de Spring; En termes très simples, il s'agit d'un conteneur pour les haricots de printemps.

Pour initialiser la valeur à la fois pour ApplicationContext et ServletContext, dans web.xml, nous allons ajouter quelque chose dans la balise context-param.

Cela vous aiderait si vous donniez un exemple à cet égard, car, autant que je sache, context-param est utilisé pour ServletContext et non ApplicationContext.

Mettre à jour:

Vous pouvez utiliser un context-param pour fournir les emplacements des fichiers de configuration du contexte de l'application racine, comme indiqué ci-dessous.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>
10
Sanjay

ApplicationContext est le conteneur de Spring.

Il est utilisé pour câbler les configurations des beans Spring et les utiliser pour l'application.

Utilisez ApplicationContext si vous souhaitez récupérer les informations sur les beans Spring.

Utilisez ServletContext si vous souhaitez obtenir/définir les attributs partagés par tous les Servlet.

0
Thạnh Nguyên

En Spring, pour lire un fichier de configuration d'initialisation spécifique, nous utilisons le context-param avec le nom prédéfini appelé contextConfigLocation

<context-param>
  <description>WebFlow context configuration</description>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/test-context.xml</param-value>
</context-param> 

Mais dans le cas d’une application Web Plain J2EE sans inclure de framework, le context-param peut lire n’importe où dans l’application, c’est-à-dire tout filtre de servlet.

La différence entre ApplicationContext et ServletContext , sanjay a expliqué 

0
Ankireddy Polu