오늘의하루

Spring HandlerMapping & Adapter, ViewResolver 본문

Spring

Spring HandlerMapping & Adapter, ViewResolver

오늘의하루_master 2023. 8. 23. 13:43

Spring 구조

1. 클라이언트 요청

2. DispatcherServlet (Front Controller 패턴)

3. DispatcherServlet이 Handler Mapping (핸들러 조회)

4. 해당 Handler를 처리할 수 있는 Handler Adapter 조회

5. 있다면 DispatcherServlet에서 HandlerAdapter 생성

6. Handler Adapter에서 Handler(Controller) 호출

7. Handler(Controller) 수행 후 HandlerAdapter에게 반환

8. Handler Adapter는 ModelAndView를 DispatcherServlet에게 반환

9. DispatcherServlet은 ViewResolver 호출하여 View를 반환

10. 반환 받은 View에 8번에서 받은 Model과 함께 렌더링 시작

11. 렌더링시 response에 담아서 클라이언트에게 응답

 

HandlerMapping

핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야한다.

 

우선 순위 

  1. RequestMappingHandlerMapping : @RequestMapping
  2. BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러 찾는다.

 

HandlerAdapter

핸들러 매핑을 통해서 찾은 핸들러를 실행 할 수 있는 핸들러 어탭터가 필요하다.

 

우선순위

  1. RequestMappingHandlerAdapter : @RequsetMapping
  2. HttpRequestHandlerAdapter : HttpRequestHandler 처리
  3. SimpleControllerHandlerAdapter : Controller 인터페이스 처리 (과거에 사용하던 방식)

 

ViewResolver

스프링 부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록해준다.

이때 application.properties에 등록된 spring.mvc.prefix와 spring.mvc.suffix 설정 정보를 사용해서 등록한다.

 

우선순위

  1. BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다.
  2. InternalResourceViewResolver : JSP를 처리할 수있는 뷰를 반환한다.

참고 : InternalResourceViewResolver는 forward한다.

다른 뷰는 실제 뷰를 렌더링하지만 JSP의 경우 forward()를 통해서 해당 JSP로 이동(실행)해야 렌더링 된다.

JSP를 제외한 나머지 뷰 템플릿은 forward() 과정 없이 렌더링 된다.


추가 내용

JSP보다 스프링 부트에서 권장하는 Thymeleaf 뷰 템플릿을 사용하면 ThymeleafResolver를 등록해야 한다.

최근에 스프링부트가 라이브러리를 추가하면 이 작업을 자동화 해주고 있다.

'Spring' 카테고리의 다른 글

[Spring] 필터와 인터셉터  (0) 2023.08.29
[Spring 검증] @ModelAttribute와 @RequestBody의 차이  (0) 2023.08.28
Web Server, WAS, Servlet 정리  (0) 2023.08.22
Spring Web관련 Scope  (0) 2023.08.22
Spring Bean Scope  (0) 2023.08.21
Comments