티스토리 뷰
1. web.xml
1) DispathcerServlet Controller 등록
-서버 시작 시 로드 되도록 load-on-startup을 1로 세팅
-contextConfigLocation을 따로 지정하지 않으면 WEB-INF 밑에 있는 [servlet-name]-servlet.xml 파일로부터 설정 정보를 읽어옴
-즉, 아래와 같은 경우에는 /WEB-INF/dispatcher-servlet.xml 파일이 있어야함
-.do 로 끝나는 모든 url에 대해서 해당 dispatcher controller가 호출됨
[web.xml]
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
-이 때, /WEB-INF/[servlet-name]-servlet.xml 설정 파일을 개발자 임의로 설정할 수 있는데 이 때 사용하는 param이 contextConfigLocation
<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/[개발자 임의 설정 파일 경로]</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2) ContextLoaderListener
-계층 별로 나눈 xml 설정 파일들이 있을 때, web.xml에서 해당 xml 설정 파일들을 모두 load 되도록 등록하려고 할 때 사용할 수 있음
[web.xml]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext_dao.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
=> ContextLoaderListener가 contextConfigLocation의 설정 정보 파일에 따라 root context 생성
만약 contextConfigLocation을 따로 설정하지 않으면 default로 /WEB-INF/applicationContext.xml을 사용
3)
[web.xml]
<servlet>
<servlet-name>aController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/aController-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>bController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/bController-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
=> 위와 같은 경우 DispatcherServlet은 각 각 별도의 webapplicationcontext를 생성
두 context는 독립적이므로 각 각의 설정파일에서 생성한 빈을 공유해서 사용할 수 없음
만약, 동시에 필요한 의존성이 있는 공통빈이 있는 경우 ContextLoaderListener를 사용하여 공통으로 사용할 빈을 설정할 수 있음
[web.xml]
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/application_dao.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>aController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/aController-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>bController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/bController-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
=>ConextLoaderListener 와 DispatcherServlet은 각 각 webapplicationcontext를 생성
ContextLoaderListener가 생성한 컨텍스트가 root 컨텍스트가 되고
DispatcherServlet이 생성한 컨텍스트가 자식 컨텍스트가 됨
즉, root 컨텍스트의 설정 빈을 aController-servlet.xml에서 생성한 빈과 bController-servlet.xml에서 생성한 빈이 사용할 수 있음
'Spring' 카테고리의 다른 글
myBatis와 Spring 연동하기 (0) | 2017.02.10 |
---|---|
MultipartFile (0) | 2017.02.09 |
유효성 검사(Validator) (0) | 2017.02.09 |
@ModelAttribute (0) | 2017.02.09 |
Spring 어노테이션 정리 (0) | 2017.02.08 |