DispatcherServlet이란?
- 기능 : 컨트롤러 / 서블릿 파일에 존재하는 '입력' 부분을 앞으로 빼 공통 로직으로 활용!
- 기능 : 전처리담당 (각 서블릿 / 컨트롤러가 활용하는 공통 부분을 앞에서 처리)
- 절차
1) 브라우저 요청을 DispatcherServlet가 받음
- 이 때, HandlerMapping이 동작!
2) DispatcherServlet <-> Controller (메소드 호출)
- 이 때, HandlerAdapter이 동작
2-1) 해당 컨트롤러의 메소드 호출 후, 뷰의 이름을 받음
- 이 때, ViewResolver가 동작! (실제 뷰 경로)
3) 뷰 이름으로 해당 뷰를 찾아 호출 & 데이터가 담겨있는 model을 전달!
- 이 때, JstlView가 동작!
4) JSP 파일이 모델 활용, 응답 결과를 만든 후 클라이언트에게 전달!
1. HandlerMapping
- K-V 형태
- URL - 메소드 두 개를 매핑 시켜놓고
요청이 들어왔을 때 요청을 어떤 메소드가 처리하면 좋을지 대답해주는 역할
- URL과 일치하는 메소드를 반환
- DispatcherServlet이 이걸 받아서 메소드를 호출해줌
2. HandlerAdapter
- DispatcherServlet이 controller 메소드를 호출 할 때, 사용
- 어떤 HandlerAdapter가 어떤 controller가 처리할 수 있는지 보고 그 컨트롤러를 호출하고 DispatcherServlet에게 전달!
- controller 뿐만 아니라 서블릿도 호출 가능! (다양한 객체를 호출하고자 설계됨)
3. ViewResolver
- InternalResourceViewResolver : servlet-context.xml
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
- "registerForm" -> "/WEB-INF/views/registerForm.jsp"
- 실제 뷰의 이름, 경로를 호출하게 변경해줌
관심사의 분리
- 역할이 다른 것들은 분리한다!
- 느슨한 연결 = 변경의 유리한 설계를 함
DispatcherServlet 소스 분석
- DispatcherServlet.class (webmvc.. .jar에 포함)