DispatcherServlet 파헤치기

SOLEE_DEV·2023년 3월 19일
0

Spring

목록 보기
5/8
post-custom-banner

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에 포함)
profile
Front-End Developer
post-custom-banner

0개의 댓글