프로그램/Spring 2.5
[15일차] DispatcherServlet 설정
영혼과영혼의양식
2010. 11. 2. 23:00
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 프로그래밍 (최범균 지음)