DispatcherServlet이란?

DistpatcherServlet?

Spring MVC의 핵심 요소인 DispatcherServlet에 대해 알아봅시다.
실제로는 보다 복잡하고 많은 처리 과정이 존재합니다만 이 글은 개괄적인 이해를 위한 정리입니다.

DispatcherServlet 또한 Servlet이며 HttpServlet을 상속 받습니다.
표현 계층(Presentation Layer)에서 HTTP 프로토콜을 통해 들어오는 요청을 받아 적합한 컨트롤러에게 위임해주는 Front Controller라고 할 수 있습니다.

이와 같이 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주기 때문에 web.xml의 역할을 상당히 많이 줄여줍니다.

원래라면 web.xml에 각 컨트롤러를 모두 등록해야 하지만,
DispatcherServlet이 모든 요청을 받고 세부 경로는 각 Controller에게 뿌려주는 프론트 컨트롤러의 역할을 함으로써, web.xml에 서블릿을 일일이 등록할 필요가 없습니다.

위 그림을 보면서 동작 흐름을 살펴볼까요?
① DispatcherServlet으로 클라이언트의 웹 요청(HttpServletRequest)가 들어온다.
② 웹 요청을 HandlerMapping에 위임하여 해당 요청을 처리할 Handler(Controller)를 탐색한다.
③ 찾은 Handler를 실행할 수 있는 HandlerAdapter를 탐색한다.
④, ⑤ 찾은 HandlerAdapter를 사용해서 Handler의 메소드를 실행한다. 이때, Handler의 반환값은 Model과 View이다.
⑥ View 이름을 ViewResolver에게 전달하고, ViewResolver는 해당하는 View 객체를 반환한다.
⑦ DispatcherServlet은 View에게 Model을 전달하고 화면 표시를 요청한다. 이때, Model이 null이면 View를 그대로 사용한다. 반면, 값이 있으면 View에 Model 데이터를 렌더링한다.
⑧ 최종적으로 DispatcherServlet은 View 결과(HttpServletResponse)를 클라이언트에게 반환한다.

과정이 복잡해보이지만

결국 DispatcherServlet을 통해 요청을 처리하기 위한 적합한 컨트롤러를 찾아서 결과를 받아오는 과정

이라고 간단히 이해할 수 있습니다.


설정방법

  1. web.xml에서 DispatcherServlet을 선언하고 URI 요청 경로를 매핑.
    예시>
<web-app>
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
</web-app>
  1. DispatcherServlet을 상속 받습니다. @WebServlet 어노테이션에 urlPatterns를 지정합니다. @WebServlet 어노테이션을 사용하려면 무조건 HttpServlet을 상속해야 합니다. 앞에서 말했듯이 DispatcherServlet은 HttpServlet을 상속하기 때문에 서블릿 클래스에서 DispatcherServlet을 상속해도 문제가 없습니다.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends DispatcherServlet {}

Reference

망나니개발자 블로그
테코블
seculoper velog

좋은 웹페이지 즐겨찾기