web-dev-qa-db-ja.com

ApplicationContextおよびServletContext

Spring MVCアプリケーションに関しては、2つのApplicationContextとServletContextの間で混乱します。 Spring WebアプリケーションごとにApplicationContextが1つだけあり、WebアプリケーションごとにServletContextが1つしかないことも知っています。 web.xmlでApplicationContextとServletContextの両方の値を開始するには、context-paramタグに何かを追加します。

それが私を混乱させるポイントです。 違いは何ですかこれら2つの間(ApplicationContextにはBeanを操作するいくつかのメソッドがあることを知っています)?およびWhenを使用しますApplicationContextおよびWhenを使用しますServletContext

18
Raleigh

サーブレットコンテキスト:

サーブレットアプリケーションがデプロイされると初期化されます。サーブレットコンテキストは、サーブレットアプリケーション全体のすべての構成(init-param、context-paramsなど)を保持します。

アプリケーションコンテキスト:

これはSpring固有のものです。 Springによって初期化されます。すべてのBean定義と、Spring構成ファイル内で定義されたBeanのライフサイクルを保持します。 Servlet-Contextはこのことについて何も知りません。

Springの親と子には2種類のコンテキストがあります。

Spring Parent Context(アプリケーションコンテキスト/ルートコンテキスト)

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

コンテキストローダーの役割、春のリスナー
Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
Springコンテナが起動すると、構成ファイルからすべてのBean定義を読み取り、Beanオブジェクトを作成し、Beanオブジェクトのライフサイクルを管理します。この構成は完全にオプションです。

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

Spring子コンテキスト(WebApplicationContext /子コンテキスト)

<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>myWebApplication</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>

Spring Webアプリケーションが起動すると、Spring Bean構成ファイルmyWebApplication-servlet.xmlが検索されます。すべてのBean定義を読み取り、Beanオブジェクトのライフサイクルを作成および管理します。親スプリングコンテキストが利用可能な場合、子スプリングコンテキストを親スプリングコンテキストにマージします。使用可能なSpring親コンテキストがない場合、アプリケーションには子Springコンテキストのみが含まれます。

21
ParagFlume

それらは別個のものです。すべてのJavaサーブレットテクノロジーに基づくWebアプリケーションは、春のアプリケーションであるかどうかにかかわらず、 サーブレットコンテキスト を持ちます。これに対して、 ApplicationContext はSpringのものであり、非常に簡単に言えば、Spring Beanを保持するコンテナです。

Web.xmlでApplicationContextとServletContextの両方の値を開始するには、context-paramタグに何かを追加します。

私の知る限り、ContextContextはApplicationContextではなくServletContextに使用されるため、この例を引用すると役立ちます。

更新

以下のように、context-paramを使用して、ルートアプリケーションコンテキスト構成ファイルの場所を指定できます。

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

ApplicationContextは、Springのコンテナです。

これは、Spring Beanの構成をまとめてアプリケーションに使用するために使用されます。

Spring Beanの情報を取得する場合は、ApplicationContextを使用します。

すべてのサーブレットに共有されている属性を取得/設定する場合は、ServletContextを使用します。

0
Thạnh Nguyên

Springでは、特定の初期化設定ファイルを読み込むために、context-paramcontextConfigLocationという定義済みの名前を使用します。

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

しかし、フレームワークを含まないプレーンJ2EE Webアプリケーションの場合、context-paramは、アプリケーションの任意の場所、つまりサーブレット、フィルターから読み取ることができます。

ApplicationContextServletContextの違いは、sanjayが説明した

0
Ankireddy Polu