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을 통해 요청을 처리하기 위한 적합한 컨트롤러를 찾아서 결과를 받아오는 과정
이라고 간단히 이해할 수 있습니다.
설정방법
- 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>
- DispatcherServlet을 상속 받습니다. @WebServlet 어노테이션에 urlPatterns를 지정합니다. @WebServlet 어노테이션을 사용하려면 무조건 HttpServlet을 상속해야 합니다. 앞에서 말했듯이 DispatcherServlet은 HttpServlet을 상속하기 때문에 서블릿 클래스에서 DispatcherServlet을 상속해도 문제가 없습니다.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends DispatcherServlet {}
Reference
망나니개발자 블로그
테코블
seculoper velog
Author And Source
이 문제에 관하여(DispatcherServlet이란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjd/DispatcherServlet이란저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)