기존 Servlet 방식
사용자의 요청을 servlet에게 전달하기 위해선 web.xml의 <servlet> 태그를 통해 servlet을 등록한다.
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>servlet class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
등록된 servlet에 해당하는 url pattern을 체크하기 위해 <servlet-mapping> 태그도 사용한다.
하지만 아래의 그림과 같이 수많은 사용자의 요청을 처리하기 위해선 여러개의 servlet이 등록되어야 하는 불편함이 있다. 사용자 요청에 맞는 servlet을 생성하고 해당 servlet에 맞는 controller에게 요청을 보내준다.
- Front Controller 패턴 적용
Front Controller 패턴을 적용하면 맨앞에 존재하는 Front Controller Servlet이 모든 요청을 받아 맞는 Controller에게 전달한다.
장점 : 모든 사용자의 요청을 받아 처리 하기 때문에 에러페이지 처리, 공지 등 한곳에서 처리한 후 컨트롤러에게 넘길수 있다.
- Dispatcher Servlet (Front Controller Servlet)
Spring 에서 Front Controller 패턴을 취하는 Servlet 을 미리 만들어 놨는데 그게 바로 Dispatcher Servlet이다.
사용자의 모든 요청을 한곳에서 받아서 HandlerMapping을 통해 적절한 Controller에게 넘겨주고 실행 결과를 Http Response형태로 만드는 역할을 한다.
- ViewResolver
ViewResolver는 사용자가 요청한것에 대한 응답 view를 렌더링하는 역할을 한다. view 이름으로부터 맞는 객체를 매핑한다.
개발자가 Dispatcher Servlet에 별도의 ViewResolver를 설정하지 않는다면 Dispatcher Servlet에 기본적으로 등록되어있는 InternalResourceViewResolver 를 사용한다.