웹 브라우저의 요청을 DispatcherServlet이 받게 되며, DispatcherServlet은 관련 컴포넌트를 이용해서 웹 브라우저의 요청을 처리한 뒤 결과를 전송하게 된다.
DispatcherServlet은 별도의 초기화 파라미터가 없다면,
웹 어플리케이션의 /WEB-INF/ 디렉터리에 위치한 [서블릿이름]-servlet.xml 파일을 이용해서 스프링 컨테이너를 생성한다.
한 개 이상의 설정 파일을 사용해야 하거나 또는 이름이 [이름]-servlet.xml 형식이 아닌 파일을 사용하려면 다음과 같이 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/main.xml
/WEB-INF/sub.xml
classpath:/common.xml
</param-value>
</init-param>
</servlet>
각 설정 파일의 경로는 웹 어플리케이션 루트 디렉터리를 기준으로 하며, "file:"이나, "classpath:" 접두어를 이용해서 로컬 파일이나, 클래스패스에 위치한 파일을 이용할 수 있다.
만약, 매핑되는 핸들러가 존재하지 않는다면, 아래와 같은 빈 설정을 통해 요청을 처리하게 한다.
스프링 컨테이너 == IoC Container == Application Context
다음은 Root Context와 Servlet Context를 등록된 web.xml 파일이다.
💬 보통 Root Context는 context-.xml 으로
Servlet Context는 -servlet.xml 으로 이름을 짓는다.
주로 데이터의 조회 및 처리를 담당하는 Service, Database에 관한 Bean들에 관한 설정을 담고 있다.
또한, Root Context에 등록되는 빈들은 모든 Context에서 공유가 가능하다.
Servlet 구성에 필요한 Controller, View Resolver, HandlerMapping 등 웹과 관련된 Bean들에 관한 설정을 담고 있다.
Servlet Context에 등록된 빈들은 Servlet Context 내에서만 사용된다.
(참조 : Context Hierarchy ref. https://docs.spring.io/spring/docs)