정의/특징
- dispatch: 보내다
- Front Controller
- Spring의 제일 앞단에서 서버로 들어오는 모든 HTTP 요청을 받는다.
- 공통적인 작업을 먼저 처리한다.
- 적절한 컨트롤러에게 요청을 위임한다.
- Spring Framework가 제공하는 Servlet 클래스
- Spring MVC 패턴에서 Controller의 역할
- web.xml 역할 축소
- 과거에는 URL 매핑을 위해 모든 서블릿을 web.xml에 등록해주어야 했다.
- 개발자가 컨트롤러를 구현해두면 디스패처 서블릿이 적합한 컨트롤러에게 위임한다.
동작 방식
- DispatcherServlet이 클라이언트의 요청을 받는다.
- Web Context (Servlet Context)의 filter를 지나 가장 먼저 요청 받음
- HandlerMapping의 매핑 정보를 통해 요청을 위임할 컨트롤러와 메소드를 찾는다.
- HashMap으로 (요청 정보, 처리할 대상)을 관리
- 요청 정보: HTTP Method + URI
- 처리할 대상: HandlerMethod (컨트롤러 bean name + 메소드 + bean factory)
- HandlerMethod를 HandlerMethodExecutionChain으로 감싸 컨트롤러에 전달 전에 인터셉터를 포함한다
- 요청을 컨트롤러에게 위임해줄 HandlerAdapter를 찾아서 요청을 전달한다.
- HandlerAdapter: 공통적인 전/후 처리 과정
@RequestParam
, @RequestBody
등을 처리하는 ArgumentResolver, ResponseEntity
의 Body를 Json으로 직렬화하는 ReturnValueHandler
- Intercepter를 모두 실행 후 HandlerAdapter를 통해 요청 위임
- HandlerAdapter가 컨트롤러에게 요청을 위임한다.
- 비즈니스 로직을 처리한다.
- 컨트롤러가 반환값을 넘겨준다.
- HandlerAdapter가 반환값을 처리한다.
- 응답이
- ResponseEntity라면 → HttpEntityMethodProcesor가 MessageConverter를 사용하여 응답 객체 직렬화, 응답 상태 HttpStatus 설정
- View라면 → ViewResolver
- 클라이언트에게 서버의 응답을 반환한다.
출처