SPRING

13. ViewResolver

ggomjiu 2025. 6. 6. 10:18

ViewResolver

: controller에서 요청하는 뷰를 찾아서 DispatcherServlet으로 반환함

- 동작 순서 )

  1. DispatcherServlet이 클라이언트에게 HTTP 요청을 받음
  2. DispatcherServlet에서 핸들러 매핑을 통해 해당 HTTP를 실행할 컨트롤러를 찾음
  3. 컨트롤러를 실행할 핸들러 어댑터를 핸들러 어댑터 목록에서 찾음
  4. 찾은 핸들러 어댑터를 통해 컨트롤러에 접근
  5. 컨트롤러 실행
  6. 핸들러 어댑터를 컨트롤러에서 반환한 ModelAndView를 DispatcherServlet에 전달
  7. ModelAndView를 ViewResolver로 통해 논리적 이름을 물리 이름으로 변화하여 랜더링 역할을 담당하는 View를 DispatcherServlet에 반환
  8. View를 랜더링한 후 클라이언트에게 전달

종류

1. InternalResourceViewResolver

: 기본적으로 설정된 ViewResolver

- JSP는 webapp/WEB-INF 밑에서 작동하기 때문에 jsp파일의 경로를 설정해줘야 함

 

2. BeanNameViewResolver

: View 타입 중에서 같은 이름을 가진 빈을 고름

- ViewResolverChain에서 유용하게 쓰임

- 이 구현체는 재정의하거나 교체할 필요가 없음

 

3. ContentNegotiatingViewResolver

: View 타입의 빈이 실제로 존재하는 경우에만 추가됨

- 이 구현체는 compoiste 리졸버로, 다른 구현체들에 위임해서 클라이언트가 전송된 Accept Http 헤더와 일치하는 항목을 찯음

 

4. ThymeleafViewResolver

: Thymeleaf 템플릿을 사용하면 위와 같은 ViewResolver가 추가됨

- 이 구현체는 뷰 이름에 prefix와 suffix를 감싼 뒤 리소스를 찾음

- 같은 이름으로 빈을 정의하면 ThymeleafView를 재정의할 수 있음

 

5. FreeMarkerViewResolver

: FreeMarker를 사용하면 위와 같은 ViewResolver가 추가됨

- 이 구현체는 뷰 이름에 prefix와 suffix를 붙인 뒤 로더 경로에서 리소스를 찾음

- 같은 이름으로 빈을 정의하면 FreeMarkerViewResolver를 재정의할 수 있음

 

6. GroovyMarkupViewResolver

: Groovy 템플릿을 사용하면 위와 같은 GroovyMarkupViewResolver가 추가됨

- 이 구현체는 뷰 이름에 prefix와 suffix를 분인 뒤 로더 경로에서 리소스를 찾음

- 같은 이름으로 빈을 정의하면 GroovyMarkupViewResolver를 재정의할 수 있음

 

7. MustacheViewResolver

:  Mustache를 사용하면 위와 같은 MustacheViewResolver가 추가됨

- 이 구현체는 뷰 이름에 prefix와 suffix를 감싼 뒤 리소스를 찾음

- 같은 이름으로 빈을 정의하면 MustacheViewResolver를 재정의할 수 있음