DispatcherServlet은 기본적으로 웹 어플리케이션의 /WEB-INF/ 디렉토리에 위치한 [서블릿이름]-servlet.xml 파일로 부터 스프링 설정 정보를 읽어옴

<servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
위와 같이 web.xml을 설정했다면, dispatcher-servlet.xml 파일로부터 설정 정보를 읽어옴.

하지만, 한 개 이상의 설정 파일을 사용해야 할 때나, 기본 설정 파일 이름이 아닌 사용자 설정 이름을 사용하고 싶을 때는 다음과 같이 설정한다.
 <servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
         /WEB-INF/board.xml
         /WEB-INF/login.xml
         /WEB-INF/study.xml
      </param-value>
   </init-param>

</servlet>
DispatcherServlet을 설정할 때 contextConfigLocation 초기화 파라미터에 설정 파일을 목록을 지정하면 됨.


DispatcherServlet은 그 자체가 서블릿이기 때문에 1개 이상의 DispatcherServlet을 설정하는 것이 가능

<servlet>
   <servlet-name>back</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/back.xml</param-value>
   </init-param>
</servlet>

<servlet>
   <servlet-name>front</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/front.xml</param-value>
   </init-param>
</servlet>

위의 경우 DispatcherServlet은 각각 별도의 WebApplicationContext를 생성하게 된다.
back DispatcherServlet은 back.xml 설정 파일을 사용하고 front DispatcherServlet은 front.xml 설정 파일을 사용하도록 설정하고 있는데, 이때 주의 할 점은 back.xml에서는 front.xml에 설정한 빈 객체를 사용할 수 없다.(그 반대의 경우도 마찬가지임)

만약 위의 같은 경우에 서로 다른 DispatcherSevlet이 공통 빈을 필요로 하는 경우 ContextLoaderListener를 사용하여 공통으로 사용될 빈을 설정할 수 있음.

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/applicationContext.xml</param-value>
   <!-- 
<param-value>/WEB-INF/adminA.xml, /WEB-INF/adminB.xml</param-value> -->
</context-param>
 
<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>


<servlet>
   <servlet-name>back</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/back.xml</param-value>
   </init-param>
</servlet>

<servlet>
   <servlet-name>front</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/front.xml</param-value>
   </init-param>
</servlet>

ContextLoaderListener를 ServletListener로 등록하고 contextConfigLocation 컨텍스트 파라미터를 이용하여 공통으로 사용될 빈 정보를 담고 있는 설정 파일 목록을 지정하면 됨.
위의 경우라면... applicationContext.xml에 설정한 빈을 그 자식인 back, front 모두에서 사용할 수 있다.
(ContextLoaderListener는 contextConfigLocation 컨텍스트 파라미터를 명시하지 않으면 /WEB-INF/applicationContext.xml을 설정 파일로 사용함)

설정파일을 class path에 위치한 파일로부터 설정 정보를 읽고 싶다면 다음과 같이 작성한다.
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>
      classpath:kr/co/aaa/adminA.xml
      classpath:kr/co/aaa/adminB.xml
      /WEB-INF/config/adminC.xml
   </param-value>
</context-param>
<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>



[참고자료] : 스프링 2.5 프로그래밍 (최범균 지음)

+ Recent posts