본문 바로가기
프로그래밍/Spring

web.xml 설정 시 ApplicationContext

by choi_9182 2021. 1. 19.

web.xml에 몇 가지 태그의 설정을 공부하다 ApplicationContext까지 오게되었다. 추후 혼자 web Application 설정 부분 개발을 맡게 되었을 때는 지금보다 더 깊은 이해가 필요할 것 같지만 지금은 어느정도 개념파악 후 정리 정도로 마무리했다.

 

우선 ApplicationContext는 오브젝트를 생성하거나 관계설정, 만들어지는 방식, 자동생성, 후처리 등을 담당하는 Spring의 대표적인 인터페이스이다.

Spring에서는 IoC컨테이너라 하기도하고, Spring컨테이너라고 부르기도 한다. 또는 BeanFactory라고 하기도 한다.

 

이러한 ApplicationContext의 하위인터페이스 중 WebApplicationContext가 있다.

이 WebApplicationContext는 web.xml 설정 시 사용된다.

 

이제 web.xml 중 WebApplicationContext와 관련된 부분을 소스와 함께 정리해겠다.

 

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
</context-param>

<servlet>
    <servlet-name>exServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml</param-value>
    </init-param>
    <load-on-startup>120</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>exServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
    <url-pattern>/apiService/*</url-pattern>
</servlet-mapping>

적혀있는 순서대로 listener태그부터 살펴보겠다.

listener-class태그에 있는 ContextLoaderListener은 Root WebApplicationContext를 생성한다.

context-param태그는 ContextConfigLocation이란 파라미터 이름으로 context-*.xml의 내용을 가져온다.

servlet태그는 dispatcherServlet이 Root WebApplicationContext를 부모로 하는 Servlet WebApplicationContext를 생성해준다. Root WebApplicationContext와 Servlet WebApplicationContext 두 계층간의 관계연결은 param-name태그의 contextConfigLocation이 기준점이 되어준다.

마지막으로 Servlet-mapping태그는 exServlet이 발생하는 url-pattern을 설정한다.

 

여기서 WebApplicationContext가 Root와 Servlet으로 나뉘는 이유는 무엇일까?

그 이유는 공통사용 그리고 웹과 관련된 UI성, 각각의 Servlet에 해당하는 것들을 나누어 사용하려고 나눈다.

 

아래는 각 WebApplicationContext의 특징이다.

 

Root WebApplicationContext

- 서로 다른 여러 Servlet에서 공통으로 사용할 수 있는 Bean을 선언

- 특정 Servlet 설정과 관계없는 설정을 함(@Service, @Repository, @Configuration, @componet)

- Servlet Context에서 정의된 Bean 사용불가

- 주로 도메인과 관련된 빈들 사용

 

Servlet WebApplicationContext

- Servlet 단위로 생성되는 Context

- Root WebApplicationContext에 같은 id로 된 Bean이 등록되있는 경우, Servlet WebApplicationCOntext로 사용됨

- Bean을 찾을 때 Servlet WebApplicationContext를 먼저 찾고, 없다면 Root WebApplicationContext에서 찾음

- Root WebApplicationContext에서 정의된 Bean 사용 가능

- 주로 웹과 관련된  UI성 빈 사용

 

'프로그래밍 > Spring' 카테고리의 다른 글

Spring AOP 간단 개념정리  (0) 2021.01.26
스프링 배치. 그리고 스케줄러, Quartz  (0) 2020.03.26
@Transactional / 트랜잭션  (0) 2020.03.16
web.xml 간단 정리  (0) 2019.09.22

댓글