웹 애플리케이션 컨텍스트 확장 애플리케이션 컨텍스트는 표준 javax.servlet.ServletContext 와 작동하도록 설계되어 컨테이너와 통신 할 수 있습니다.
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
WebApplicationContext에서 인스턴스화 된 Bean은 ServletContextAware 인터페이스를 구현하는 경우 ServletContext를 사용할 수도 있습니다.
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
getResourceAsStream () 메소드를 호출하여 WEB-INF 자원 (xml 구성 등)에 액세스하는 것과 같이 ServletContext 인스턴스와 관련하여 가능한 많은 작업이 있습니다. 일반적으로 서블릿 스프링 애플리케이션에서 web.xml에 정의 된 모든 애플리케이션 컨텍스트는 웹 애플리케이션 컨텍스트이며 이는 루트 웹 애플리케이션 컨텍스트와 서블릿의 애플리케이션 컨텍스트 둘 다로 간다.
또한 웹 응용 프로그램 컨텍스트 기능에 따라 응용 프로그램을 테스트하기가 약간 어려워 질 수 있으며 테스트를 위해 MockServletContext 클래스 를 사용해야 할 수도 있습니다 .
서블릿과 루트 컨텍스트의 차이점
Spring을 사용하면 다중 레벨 애플리케이션 컨텍스트 계층을 빌드 할 수 있으므로 현재 애플리케이션 컨텍스트에없는 경우 필요한 Bean을 상위 컨텍스트에서 가져옵니다. 웹 앱에는 기본적으로 루트 및 서블릿 컨텍스트라는 두 가지 계층 레벨이 있습니다 .
이를 통해 일부 서비스를 전체 애플리케이션의 싱글 톤 (Spring Security Bean 및 기본 데이터베이스 액세스 서비스가 여기에 상주 함)으로 실행하고 다른 서비스를 해당 서블릿에서 분리 된 서비스로 실행하여 Bean 간의 이름 충돌을 피할 수 있습니다. 예를 들어 한 서블릿 컨텍스트는 웹 페이지를 제공하고 다른 서블릿 컨텍스트는 상태 비 저장 웹 서비스를 구현합니다.
이 두 레벨 분리는 스프링 서블릿 클래스를 사용할 때 즉시 제공됩니다. 루트 애플리케이션 컨텍스트를 구성하려면 web.xml에서 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>
(루트 애플리케이션 컨텍스트는 web.xml에 선언 된 ContextLoaderListener에 의해 작성됩니다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) 및 서블릿 애플리케이션 컨텍스트의 서블릿 태그
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>app-servlet.xml</param-value>
</init-param>
</servlet>
init-param이 생략되면, 스프링은이 예제에서 myservlet-servlet.xml을 사용한다는 점에 유의하십시오.
Spring Framework에서 applicationContext.xml과 spring-servlet.xml의 차이점 도 참조하십시오.
web.xml
파일 의 내용에 대해 묻습니다 . 이 질문은 일부 Spring 클래스에 대해 묻습니다.