기본적인 Spring 설정을 위한 web.xml은..
요런 모양을 갖는다.. 그러면 WEB-INF 밑에
[servlet-name]-servlet.xml 파일로 부터 설정 정보를 읽어오려고 한다.
xml 파일이 없으면 당연이 톰캣 구동시 excpetion이 발생하고...
(<load-on-startup>1</load-on-startup> 이 없으면 구동시 exception은 발생하지 않는다.. 왜냐면 구동시에 servlet이 적재 되는 것이 아니고, 실제 servlet에 접근시 초기화가 진행되기 때문에...)
이 설정 파일을 서블릿별로 지정 할 수 있는데..
아래와 같이 하면 된다..
이렇게 하면 action이라는 Dispatcher서블릿은 톰캣 구동시
지정된 경로에서 xml 설정 파일을 읽어오게 된다.
만일 위와 같은 방법으로 web.xml에 서로 다른 DispatcherServlet을 만들어서 각각 다른 설정 xml을 갖도록 한다면 그 두 DispatcherServlet은 각각 별도의 WebApplicationContext를 생성한다. 즉.. 각각의 xml에 설정되어 있는 빈 객체는 서로 다른 xml에 설정되어 있는 빈 객체를 사용 할 수 없게 된다.
(action.xml 과 remoting.xml)
이런 경우에
이렇게 ContextLoaderListner를 ServletListner로 등록하고 공통으로 사용 될 빈 정보를 담고 있는 설정 파일 목록을 지정하면 공통으로 사용 할 수 있다.
ContextLoaderListener와 DispatcherServlet은 각각 WebApplicationContext 객체를 생성하는데
이때 객체간의 관계를 보면
root:WebApplcationContext <- (parent) action:root:WebApplcationContext
<- (parent) root:WebApplcationContext
이라고 한다.
(스프링 2.5 프로그래밍 - 최범균저, 가메출판사 참조)
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.gs</url-pattern>
</servlet-mapping>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.gs</url-pattern>
</servlet-mapping>
요런 모양을 갖는다.. 그러면 WEB-INF 밑에
[servlet-name]-servlet.xml 파일로 부터 설정 정보를 읽어오려고 한다.
xml 파일이 없으면 당연이 톰캣 구동시 excpetion이 발생하고...
(<load-on-startup>1</load-on-startup> 이 없으면 구동시 exception은 발생하지 않는다.. 왜냐면 구동시에 servlet이 적재 되는 것이 아니고, 실제 servlet에 접근시 초기화가 진행되기 때문에...)
이 설정 파일을 서블릿별로 지정 할 수 있는데..
아래와 같이 하면 된다..
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/spring/actions/remoting*.xml </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/spring/actions/remoting*.xml </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
이렇게 하면 action이라는 Dispatcher서블릿은 톰캣 구동시
지정된 경로에서 xml 설정 파일을 읽어오게 된다.
만일 위와 같은 방법으로 web.xml에 서로 다른 DispatcherServlet을 만들어서 각각 다른 설정 xml을 갖도록 한다면 그 두 DispatcherServlet은 각각 별도의 WebApplicationContext를 생성한다. 즉.. 각각의 xml에 설정되어 있는 빈 객체는 서로 다른 xml에 설정되어 있는 빈 객체를 사용 할 수 없게 된다.
(action.xml 과 remoting.xml)
이런 경우에
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/spring/config/applicationContext*.xml
/WEB-INF/spring/services/serviceContext*.xml
/WEB-INF/spring/services/remoting*.xml
</param-value>
</context-param>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/spring/config/applicationContext*.xml
/WEB-INF/spring/services/serviceContext*.xml
/WEB-INF/spring/services/remoting*.xml
</param-value>
</context-param>
이렇게 ContextLoaderListner를 ServletListner로 등록하고 공통으로 사용 될 빈 정보를 담고 있는 설정 파일 목록을 지정하면 공통으로 사용 할 수 있다.
ContextLoaderListener와 DispatcherServlet은 각각 WebApplicationContext 객체를 생성하는데
이때 객체간의 관계를 보면
root:WebApplcationContext <- (parent) action:root:WebApplcationContext
<- (parent) root:WebApplcationContext
이라고 한다.
(스프링 2.5 프로그래밍 - 최범균저, 가메출판사 참조)