DispatcherServlet

정미·2022년 7월 8일
0

Computer Science

목록 보기
18/81

정의/특징

  • dispatch: 보내다
  • Front Controller
    1. Spring의 제일 앞단에서 서버로 들어오는 모든 HTTP 요청을 받는다.
    2. 공통적인 작업을 먼저 처리한다.
    3. 적절한 컨트롤러에게 요청을 위임한다.
  • Spring Framework가 제공하는 Servlet 클래스
  • Spring MVC 패턴에서 Controller의 역할
  • web.xml 역할 축소
    • 과거에는 URL 매핑을 위해 모든 서블릿을 web.xml에 등록해주어야 했다.
    • 개발자가 컨트롤러를 구현해두면 디스패처 서블릿이 적합한 컨트롤러에게 위임한다.

동작 방식


  1. DispatcherServlet이 클라이언트의 요청을 받는다.
    • Web Context (Servlet Context)의 filter를 지나 가장 먼저 요청 받음
  2. HandlerMapping의 매핑 정보를 통해 요청을 위임할 컨트롤러와 메소드를 찾는다.
    • HashMap으로 (요청 정보, 처리할 대상)을 관리
      • 요청 정보: HTTP Method + URI
      • 처리할 대상: HandlerMethod (컨트롤러 bean name + 메소드 + bean factory)
    • HandlerMethod를 HandlerMethodExecutionChain으로 감싸 컨트롤러에 전달 전에 인터셉터를 포함한다
  3. 요청을 컨트롤러에게 위임해줄 HandlerAdapter를 찾아서 요청을 전달한다.
    • HandlerAdapter: 공통적인 전/후 처리 과정
      • @RequestParam, @RequestBody 등을 처리하는 ArgumentResolver, ResponseEntity의 Body를 Json으로 직렬화하는 ReturnValueHandler
    • Intercepter를 모두 실행 후 HandlerAdapter를 통해 요청 위임
  4. HandlerAdapter가 컨트롤러에게 요청을 위임한다.
  5. 비즈니스 로직을 처리한다.
  6. 컨트롤러가 반환값을 넘겨준다.
  7. HandlerAdapter가 반환값을 처리한다.
    • 응답이
      • ResponseEntity라면 → HttpEntityMethodProcesor가 MessageConverter를 사용하여 응답 객체 직렬화, 응답 상태 HttpStatus 설정
      • View라면 → ViewResolver
  8. 클라이언트에게 서버의 응답을 반환한다.
    • 응답은 다시 필터를 거쳐 반환된다.

출처

0개의 댓글