Dispatcher Servlet 의 동작원리
어떻게 dispatcher servlet 을 사용하면 핸들러를 annotation 기반으로 쓸 수 있느냐 에 대해서 알아보자
Dispatcher Servlet 의 doDispatch 메소드가 있다.
대표적인 기능으로는 요청을 분석을 해서 멀티파트 요청인지 로케일은 어떤건지 ,뭐 테마는 어떤건지를
판단을 한다
핸들러를 찾아오는 부분인데 이 요청을 처리 할 수 있는 핸들러를 찾아오는 부분
핸들러들 중에서 이 요청을 처리할 수 있는 핸들러가 있는지를 확인한다.
안으로 들어가보면 이 디스패처가 들고있는 핸들러들 중에서
실질적으로 RequestMappingHandlerMapping 이
우리가 사용하는 어노테이션 뭐 getMapping postMapping 등으로 지정한 핸들러들을
찾아주는 녀석
이 대부분은 Strategy pattern 이 사용 되고 있다.
조금 더 내려가다 보면
핸들러 어뎁터 가 있다. 요녀석은 핸들러를 실행 시켜 주는 녀석
디스패처 서블릿 안에는 이 핸들러 어댑터도 여러개가 등록되어있다
그 중에서 우리가 찾아낸 핸들러는 누가 실행 할 수 있느냐
이 중에서 RequestMappingHandlerAdapter 가 그 핸들러를 실행 시켜 주는 녀석
그 후 Handler Method 를 invoke 하게 된다.
java 의 리플렉션을 이용해서 핸들러 메소드 를 실행 하게 되는 것
*
여기서 잠깐 참고
@RestController 는 @Controller 에서 @ResponseBody 를 달아준 것 과 같다.
모든 메소드에 달아주는 걸 생략 하기 위해서 RestController 어노테이션을 달아준다.
*
15 가지의 ReturnValueHandler 에서
RequestResponseBodyMethodProcessor 가
ResponseBody 어노테이션을 달고 있는 return 값을 처리해줄 수 있는 녀석
저 Return Value Handler 는 컨버터를 써서 return 값을
메시지 본문(http 본문)에 넣어주는 처리를 해준다.
즉, 잠깐 요약 해보자면 디스패처 서블릿은
HandlerMapping 을 사용해서 이 요청을 어떤 핸들러가 사용을 할 지 결정을 해주고
HandlerAppater 를 이용해서 핸들러를 실행을 시켜 준다.
그 후 핸들러를 실행 시킨 return 값을 어떻게 처리 할지를
ReturnValueHandler 가 처리를 해서 결과값을 나타내준다.
**** 위에서 말한 Strategy Pattern 이란?
전략을 쉽게 바꿀 수 있게 하는 패턴이다.
인터페이스를 만든 후 해당 인터페이스를 구현 한 여러개의 클래스를 만든다.
해당 클래스를 사용하는 곳에서 인터페이스 타입으로 원하는 클래스 객체를 생성 한 후
쉽게 로직을 변경해서 사용할 수 있는 패턴
해당 디자인 패턴은 추후에 다시 보도록 한다
'Spring > MVC' 카테고리의 다른 글
스프링 MVC 설정 (0) | 2020.02.10 |
---|---|
Dispatcher Servlet 2 (0) | 2020.02.08 |
스프링 MVC 연동 (0) | 2020.02.07 |
스프링 IOC 컨테이너 연동 (0) | 2020.02.06 |
서블릿 리스너와 필터 (0) | 2020.02.06 |