[Spring #12] DispatcherServlet 파헤치기

DispatcherServlet
DispatcherServlet이 하는 일 (간단히)
- 입력, 처리, 출력의 과정 중에서 입력 부분(전처리 부분)을 담당
- 기본
요청이 들어오면 요청을 받아 해당 컨트롤러의 메서드를 호출하고 결과로 뷰 이름을 받고 뷰를 호출한다

DispatcherServlet이 하는 일 (자세히)
- 컨트롤러의 메서드를 호출하는 과정
HandlerMapping으로 url과 메서드를 맵핑시켜 저정해 둔다
요청이 오면 어떤 메서드를 호출하면 좋을지 HandlerMapping에 물어보는데, HandlerMapping은 등록되어 있는 맵에서 해당 url과 일치하는 메서드를 DispatcherServlet에게 반환해준다
DispatcherServlet은 그 이후에 이 메서드를 어떤 HandlerAdapter가 호출할 수 있는지 보고 그 HandlerAdapter에게 넘겨준다
HandlerAdapter는 메서드를 호출하고 다시 DispatcherServlet에게 넘겨준다
- HandlerAdapter를 사용함으로써 DispatcherServlet과 Controller 사이가 느슨한 연결이 된다
-> 만약 직접 연결이 되어 있을 경우에는 Controller가 아닌 다른 객체를 호출할 때 DispatcherServlet의 내용을 수정해야한다
하지만 HandlerAdapter를 통해 호출할 경우 다른 객체를 호출하면 다른 HandlerAdapter를 통해 호출할 수 있게 하면 된다 (변경에 유리!)
- 컨트롤러에서 받은 뷰를 호출하는 과정
controller에서 view 이름을 반환 받으면 그 문자열을 ViewResolver에 전달한다
ViewResolver는 접두사(파일의 앞 경로)와 접미사(파일의 확장자)를 붙여 실제 뷰가 어떤 것인지 작성하여 DispatcherServlet에게 반환한다
DispatcherServlet이 해당 뷰와 데이터가 담겨 있는 모델을 JstlView에 전달하고 JstlView가 뷰를 호출하며 모델을 넘겨준다

DispatcherServlet소스 분석*