it-swarm.com.de

ApplicationContext und ServletContext

Ich werde zwischen den beiden ApplicationContext und ServletContext verwirrt, wenn es um Spring MVC Application geht .. Ich weiß, dass es nur einen ApplicationContext pro Spring-Webanwendung gibt und es nur einen ServletContext pro Webanwendung gibt. Um den Wert für ApplicationContext und ServletContext in web.xml zu initiieren, fügen wir etwas in context-param tag hinzu.

Das ist der Punkt, der mich verwirrt. Was sind die Unterschiede zwischen diesen beiden (ich weiß, dass ApplicationContext einige Methoden hat, um mit Beans zu arbeiten)? und Wann würden wir ApplicationContext verwenden und Wann würden wir ServletContext verwenden?

13
Raleigh

Servlet-Kontext:

Sie wird initialisiert, wenn eine Servlet-Anwendung implementiert wird. Servlet-Kontext enthält alle Konfigurationen (init-param, Kontextparameter usw.) der gesamten Servlet-Anwendung.

Anwendungskontext:

Es ist eine frühlingsspezifische Sache. Es wird durch den Frühling initialisiert. Es enthält alle Bean-Definitionen und den Lebenszyklus der Beans, die in den Federkonfigurationsdateien definiert sind. Servlet-Context hat keine Ahnung von diesen Dingen.

In Spring übergeordnetes und untergeordnetes Element gibt es zwei Arten von Kontexten.

Spring Parent Context (Anwendungskontext/Stammkontext)

  <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>

Rolle-Zweck-of-Contextloaderlistener-im-Frühling
Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
Wenn Spring Container gestartet wird, liest er alle Bean-Definitionen aus den Konfigurationsdateien, erstellt Beans-Objekte und verwaltet den Lebenszyklus der Beans-Objekte .. Diese Konfiguration ist völlig optional.

DispatcherServlet vs ContextLoaderListener
/deklarations-spring-bean-in-parent-context-vs-child-context

Spring Child Context (WebApplicationContext/Child Context)

<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>

Beim Start der Spring-Webanwendung wird nach der Spring Bean-Konfigurationsdatei myWebApplication-servlet.xml gesucht. Es liest alle Bean-Definitionen und erstellt und verwaltet den Lebenszyklus der Bean-Objekte. Wenn der übergeordnete Federkontext verfügbar ist, wird der untergeordnete Federkontext mit dem übergeordneten Federkontext zusammengeführt. Wenn kein übergeordneter Spring-Kontext verfügbar ist, hat die Anwendung nur den Child-Spring-Kontext.

16
ParagFlume

Sie sind getrennte Dinge. Alle auf der Servlet-Technologie basierenden Java-Webanwendungen verfügen über ein Servlet-Kontext , unabhängig davon, ob es sich um eine Spring-Anwendung handelt oder nicht. Im Gegensatz dazu ist ApplicationContext eine Frühlingssache; In sehr einfachen Worten ist es ein Behälter für Springbohnen.

Um den Wert sowohl für ApplicationContext als auch für ServletContext in web.xml zu initiieren, fügen wir etwas im context-param-Tag hinzu.

Es wäre hilfreich, wenn Sie dafür ein Beispiel anführen, da meines Wissens nach context-param für ServletContext und nicht für ApplicationContext verwendet wird.

Update:

Sie können einen context-param verwenden, um die Speicherorte der Konfigurationsdateien des Stammanwendungskontexts anzugeben (siehe unten).

<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 ist der Container von Spring.

Es wird verwendet, um die Konfigurationen aus Spring-Beans zusammenzuschließen und für die Anwendung zu verwenden.

Verwenden Sie ApplicationContext, wenn Sie die Informationen von Spring-Beans abrufen möchten.

Verwenden Sie ServletContext, wenn Sie die gemeinsam genutzten Attribute für alle Servlets abrufen/festlegen möchten.

0
Thạnh Nguyên

Um eine bestimmte Initialisierungskonfigurationsdatei zu lesen, verwenden wir in Spring den context-param mit dem vordefinierten Namen contextConfigLocation

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

Im Fall einer einfachen J2EE-Webanwendung, die keine Frameworks enthält, kann context-param von jedem beliebigen Ort in der Anwendung lesen, d.

Der Unterschied zwischen ApplicationContext und ServletContext, erklärt sanjay 

0
Ankireddy Polu