[SPRING] ApplicationContext와 ServletContext
SPRINGApplicationContext와 ServletContext
Spring MVC 응용 프로그램에서는 두 ApplicationContext와 ServletContext 사이에 혼란스러워합니다. 스프링 웹 애플리케이션 당 하나의 ApplicationContext 만 있고 웹 애플리케이션 당 하나의 ServletContext 만 있다는 것을 알고 있습니다. web.xml에서 ApplicationContext와 ServletContext의 값을 초기화하기 위해 context-param 태그에 뭔가를 추가합니다.
그것이 나를 혼란스럽게 만드는 요점입니다. 이 두 가지의 차이점은 무엇입니까 (저는 ApplicationContext가 bean을 다루는 몇 가지 메소드를 가지고 있습니다). ApplicationContext를 사용할 때와 언제 우리가 ServletContext를 사용할 것인가?
해결법
-
==============================
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.그것들은 별개의 것입니다. 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.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.ApplicationContext는 Spring의 컨테이너이다.
ApplicationContext는 Spring의 컨테이너이다.
Spring 빈의 구성을 함께 연결하고 응용 프로그램에 사용하는 데 사용됩니다.
스프링 빈의 정보를 검색하려면 ApplicationContext를 사용하십시오.
모든 Servlet에 공유 된 속성을 가져 오거나 설정하려면 ServletContext를 사용하십시오.
-
==============================
5.ServletContext는 'enclosing'ApplicationContext와 구별된다. 자바 문서는 ServletContext에 대해 아래에 나와있다.
ServletContext는 'enclosing'ApplicationContext와 구별된다. 자바 문서는 ServletContext에 대해 아래에 나와있다.
동일한 AppBase 아래에는 각각 자체 DocBase, WEB-INF / web.xml 등으로 하나 이상의 "웹 응용 프로그램"이있을 수 있으므로 모든 "웹 응용 프로그램"이 공유하는 공통 환경 / 컨텍스트가 분명히 있습니다. 이는 ApplicationContext로 참조됩니다. JSF의 경우, PortletContext는 ServletContext의 카운터 부분이고 ApplicationContext는 ExternalContext라고합니다.
from https://stackoverflow.com/questions/31931848/applicationcontext-and-servletcontext by cc-by-sa and MIT license