위치 : webapp > WEB-INF > config > egovframework > springmvc > dispatcher-servlet.xml
dispatcher-servlet.xml => 뷰와 컨트롤러를 연결해주는 역할을 하는 파일이다.
즉 해당 xml을 이용하면 스프링에서 제공하는 mvc를 사용 하겠다는 말과 동일하다.
작동순서
1. 클라이언트가 해당 어플리케이션에 접근하면 접근한 URL의 요청을 dispather-servlet이 가로챈다. 이렇게 요청을
가로채는게 가능한 것은 web.xml에 등록된 dispatcher-servlet의 <url-pattern>이 해당 어플의 모든 url로 등록 되어 있기 때문이다.
현재 전자정부프레임워크에는 <url-pattern>*.do</url-pattern> 라고 지정되어 있을 것이다.
2. 가로챈 정보를 HandlerMapping에게 보내서 해당요청을 처리할 수 있는 controller를 찾게 된다.
3. 핸들러 매핑이 해당 요청을 처리할 controller를 찾아냈다면 요청을 컨트롤러에 보내준다. 개발자가 건드리는 부분이 컨트롤러이다.
4. 컨트롤러는 해당 요청을 처리한 후 응답받을 view의 이름을 리턴하게 된다. 그 때 이름을 ViewResolver가 받아서 View의 존재 여부를 확인 한다.
5. 해당 view가 존재하면 처리결과를 view에 보낸 후 이 결과를 다시 디스패처 서블릿에 보낸다. 그리고 디스패처서블릿은 최종결과를 뷰에 보내게 된다.
<!-- 타일즈 세팅하는 프레임워크 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
<property name="order" value="1" />
</bean>
<!-- Tiles 2 Configurer -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/default-layout.xml</value>
</list>
</property>
</bean>
위와 같이 정의할 경우 /WEB-INF/tiles/default-layout.xml파일을 로드하여 각 view 이름에 맞게 tiles view를 리턴해 준다.
HandlerMapping - 들어오는 요청을 handlerMapping 구현체가 다양하게 만든 기준에 기반한 전처리자(pre-processors)와 후처리자(post-processors)(핸들러 인터셉터)의 목록에 매핑한다.
대부분의 인기있는 구현체는 어노테이션이 붙은 컨트롤러를 지원하지만 그렇지 않은 구현체들도 존재한다.
HandlerAdapter - 핸들러가 실제로 호출되었는지 여부에 상관없이 DispatcherServlet이 요청에 매핑된 핸들러를 호출하도록 돕닌다. 예를들어 어노테이션이 붙은 컨트롤러를 호출하려면 다양한 어노테이션을 처리해야 한다.
그러므로 HandlerAdapter의 주요 목적은 이러한 세부내용에서 DispatcherServlet을 보호하는 것이다.
HandlerExceptionResolver - 예외를 뷰에 매핑하고 더 복잡한 예외 처리 코드도 사용할 수 있다.
ViewResolver - 논리적인 스프링 기반의 뷰 이름을 실제 View 타입으로 처리한다.
LocaleResolver - 국제화된 뷰화면을 제공할 수 있도록 클라이언트가 사용하는 로케일을 처리한다.
ThemeResolver - 개인화된 레이아웃을 제공하는 것처럼 웹 어플리케이션이 사용할 수 있는 테마를 처리한다.
MiltipartResolver - HTML 폼에서 업로드하는 파일을 처리하는 등의 멀티파트(multi-part) 요청을 파싱한다.
tiles > default-layout.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<definition name="layouts-tiles" template="/WEB-INF/jsp/egovframework/example/cmmn/default-layouts.jsp">
<put-attribute name="header" value="/WEB-INF/jsp/egovframework/example/cmmn/default-header.jsp" />
<put-attribute name="left" value="/WEB-INF/jsp/egovframework/example/cmmn/default-left.jsp" />
<put-attribute name="nav" value="/WEB-INF/jsp/egovframework/example/cmmn/default-nav.jsp" />
<put-attribute name="content" value="" />
<put-attribute name="footer" value="/WEB-INF/jsp/egovframework/example/cmmn/default-footer.jsp" />
</definition>
<definition name="*/*.tiles" extends="layouts-tiles">
<put-attribute name="content" value="/WEB-INF/jsp/egovframework/example/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
// <put-attribute name="content" value="/WEB-INF/jsp/egovframework/example/{1}/{2}.jsp" />
// 이부분의 뜻은 해당폴더 /WEB-INF/jsp/egovframework/example 밑에 있는 모든 jsp에 타일즈 (현재 폴더 defult-layout.xml)를 적용시키겠다 라는 뜻이다.