자바를 사용해서 웹을 만들기 위한 기술. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.
스프링에서 Dispatcher Servlet
이란 스프링의 프론트 컨트롤러로써 모든 요청을 앞에서 받아서 해당하는 컨트롤러에 넘겨주는 역할을 한다. 기존의 서블릿에서는 모든 컨트롤러가 서블릿을 상속하고 Mapping을 등록하는 방식으로 사용하였으나 스프링이 나오면서 그럴 필요 없이 컨트롤러 클래스 상속이나 어노테이션을 붙이기만 하면 등록할 수 있다.
실행순서는 다음과 같다.
Dispatcher Servlet
은 Handler Mapping
을 통해 url에 해당하는 Handler Adapter
를 찾는다.Handler Adapter
를 실행한다.(내부에서는 핸들러 실행)Handler Adapter
에게 돌려준다.Dispatcher Servlet
에 돌려준다.코드를 보면서 내부 구조를 따라가 보도록 하겠다.
DispatcherServlet
안에서 doDispatch
를 실행.
맞는 mappedHandler
를 찾아서 HandlerAdapter
를 받아온다.
핸들러를 실행하면 결과를 보여주는 부분이다.
@RestController
에서 사용하는 RequestMappingHandlerAdapter
(AbstractHandlerMethodAdapter
를 상속)같은 경우 함수를 찾아서 invokeHandlerMethod
에서 메서드를 실행하고 결과를 반환한다.
그리고 이 안에서
RequestMappingHandlerAdapter
이렇게 invokeHandlerMethod에서 자신에게 설정된 ArgumentResolver도 설정해준다.
invocableMethod.invokeAndHandle(webRequest, mavContainer, new Object[0]);를 실행하면서 적용했던 ArgumentResolver가 내부에서 실행된다...(여기부터는 생략)