복붙노트

[SPRING] ApplicationContext와 ServletContext

SPRING

ApplicationContext와 ServletContext

Spring MVC 응용 프로그램에서는 두 ApplicationContext와 ServletContext 사이에 혼란스러워합니다. 스프링 웹 애플리케이션 당 하나의 ApplicationContext 만 있고 웹 애플리케이션 당 하나의 ServletContext 만 있다는 것을 알고 있습니다. web.xml에서 ApplicationContext와 ServletContext의 값을 초기화하기 위해 context-param 태그에 뭔가를 추가합니다.

그것이 나를 혼란스럽게 만드는 요점입니다. 이 두 가지의 차이점은 무엇입니까 (저는 ApplicationContext가 bean을 다루는 몇 가지 메소드를 가지고 있습니다). ApplicationContext를 사용할 때와 언제 우리가 ServletContext를 사용할 것인가?

해결법

  1. ==============================

    1.서블릿 애플리케이션이 전개 될 때 초기화됩니다. Servlet Context는 전체 서블릿 애플리케이션의 모든 구성 (init-param, context-params 등)을 보유합니다.

    서블릿 애플리케이션이 전개 될 때 초기화됩니다. Servlet Context는 전체 서블릿 애플리케이션의 모든 구성 (init-param, context-params 등)을 보유합니다.

    그것은 봄에 특정한 것입니다. Spring에 의해 초기화됩니다. Spring 설정 파일 내에 정의 된 bean의 모든 bean 정의와 생명주기를 가지고있다. Servlet-Context는 이것에 대해 전혀 모른다.

    Spring 부모와 자식에는 두 가지 유형의 컨텍스트가 있습니다.

      <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- 개념 스프링 컨테이너가 시작되면 설정 파일에서 모든 빈 정의를 읽고 빈 객체를 생성하고 빈 객체의 라이프 사이클을 관리한다. 이 구성은 전적으로 선택 사항입니다.

    DispatcherServlet 대 ContextLoaderListener / declaring-spring-bean-in-parent-context-vs-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>
    

    스프링 웹 애플리케이션이 시작될 때, 스프링 빈 설정 파일 인 myWebApplication-servlet.xml을 찾을 것이다. 그것은 모든 빈 정의를 읽고 빈 객체 라이프 사이클을 생성하고 관리합니다. 부모 스프링 컨텍스트가 사용 가능하면 자식 스프링 컨텍스트를 부모 스프링 컨텍스트와 병합합니다. 사용할 수있는 Spring 상위 컨텍스트가없는 경우 응용 프로그램은 하위 스프링 컨텍스트 만 갖습니다.

  2. ==============================

    2.그것들은 별개의 것입니다. Servlet 기술을 기반으로하는 모든 Java 웹 응용 프로그램은 스프링 응용 프로그램이든 아니든 서블릿 컨텍스트를 갖습니다. 반대로, ApplicationContext는 Spring의 일이다. 매우 간단한 용어로 Spring Bean을 저장하는 컨테이너입니다.

    그것들은 별개의 것입니다. Servlet 기술을 기반으로하는 모든 Java 웹 응용 프로그램은 스프링 응용 프로그램이든 아니든 서블릿 컨텍스트를 갖습니다. 반대로, ApplicationContext는 Spring의 일이다. 매우 간단한 용어로 Spring Bean을 저장하는 컨테이너입니다.

    내가 알고있는 한 Context-param이 ApplicationContext가 아닌 ServletContext에 사용되기 때문에 예제를 인용하면 도움이 될 것입니다.

    최신 정보:

    컨텍스트 - 매개 변수를 사용하여 아래와 같이 루트 응용 프로그램 컨텍스트 구성 파일의 위치를 ​​제공 할 수 있습니다.

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

    3.Spring에서는 특정 초기화 구성 파일을 읽으려면 contextConfigLocation이라는 미리 정의 된 이름으로 context-param을 사용합니다.

    Spring에서는 특정 초기화 구성 파일을 읽으려면 contextConfigLocation이라는 미리 정의 된 이름으로 context-param을 사용합니다.

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

    그러나 프레임 워크를 포함하지 않는 일반 J2EE 웹 응용 프로그램의 경우 컨텍스트 매개 변수는 응용 프로그램의 모든 위치, 즉 모든 서블릿에서 읽을 수 있습니다.

    ApplicationContext와 ServletContext의 차이, sanjay의 설명

  4. ==============================

    4.ApplicationContext는 Spring의 컨테이너이다.

    ApplicationContext는 Spring의 컨테이너이다.

    Spring 빈의 구성을 함께 연결하고 응용 프로그램에 사용하는 데 사용됩니다.

    스프링 빈의 정보를 검색하려면 ApplicationContext를 사용하십시오.

    모든 Servlet에 공유 된 속성을 가져 오거나 설정하려면 ServletContext를 사용하십시오.

  5. ==============================

    5.ServletContext는 'enclosing'ApplicationContext와 구별된다. 자바 문서는 ServletContext에 대해 아래에 나와있다.

    ServletContext는 'enclosing'ApplicationContext와 구별된다. 자바 문서는 ServletContext에 대해 아래에 나와있다.

    동일한 AppBase 아래에는 각각 자체 DocBase, WEB-INF / web.xml 등으로 하나 이상의 "웹 응용 프로그램"이있을 수 있으므로 모든 "웹 응용 프로그램"이 공유하는 공통 환경 / 컨텍스트가 분명히 있습니다. 이는 ApplicationContext로 참조됩니다. JSF의 경우, PortletContext는 ServletContext의 카운터 부분이고 ApplicationContext는 ExternalContext라고합니다.

  6. from https://stackoverflow.com/questions/31931848/applicationcontext-and-servletcontext by cc-by-sa and MIT license