본문 바로가기

Spring/MVC

Dispatcher Servlet

Dispatcher Servlet 의 동작원리

 

어떻게 dispatcher servlet 을 사용하면 핸들러를 annotation 기반으로 쓸 수 있느냐 에 대해서 알아보자

 

Dispatcher Servlet 의 doDispatch 메소드가 있다.

 

 

 

 

대표적인 기능으로는 요청을 분석을 해서 멀티파트 요청인지 로케일은 어떤건지 ,뭐 테마는 어떤건지를

판단을 한다

 

중요한 부분 중 하나

핸들러를 찾아오는 부분인데 이 요청을 처리 할 수 있는 핸들러를 찾아오는 부분

 

 

핸들러들 중에서 이 요청을 처리할 수 있는 핸들러가 있는지를 확인한다.

안으로 들어가보면 이 디스패처가 들고있는 핸들러들 중에서  

 

디스패처 서블릿이 들고있는 기본 핸들러

 실질적으로 RequestMappingHandlerMapping 이

우리가 사용하는 어노테이션 뭐 getMapping postMapping 등으로 지정한 핸들러들을 

찾아주는 녀석 

 

이 대부분은 Strategy pattern 이 사용 되고 있다.

 

 조금 더 내려가다 보면 

 

핸들러 어뎁터 가 있다. 요녀석은 핸들러를 실행 시켜 주는 녀석

디스패처 서블릿 안에는 이 핸들러 어댑터도 여러개가 등록되어있다

그 중에서 우리가 찾아낸 핸들러는 누가 실행 할 수 있느냐 

 

기본적으로 가지고 있는 핸들러 어댑터 3가지

이 중에서 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