본문 바로가기
Spring/spring mvc

뷰리졸버(ViewResolver)

by 킹차니 2021. 6. 27.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

 

 

뷰리졸버(ViewResolver)

 

 

뷰 리졸버가 어떻게 작동하는지 알아보겠습니다.

OldController로 view를 반환해보겠습니다.

ModelAndView객체를 반환하도록 하였는데 인자로 논리 경로만 넣어주었습니다. 

이를 뷰로써 사용자에게 보여주기 위해서는 뷰리졸버가 경로를 알 수 있도록 application.properties에 다음을 추가해줘야한다.

 

위의 내용을 보고 뷰리졸버가 매핑하여 뷰를 띄어주는 것입니다.

 

 

 

 

 

뷰 리졸버 - InternalResourceViewResolver

스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties 에 등록한 spring.mvc.view.prefix , spring.mvc.view.suffix 설정 정보를 사용해서 등록합니다.

 

 

참고로 절대경로를 처음부터 넣어줘도 동작하기는 합니다. (그러나 권장하지 않는 방식)

 

 

(스프링 부트가 아래와 같은 코드를 대신 실행해주어서 우리가 직접 InternalResouceViewResolver를 만들 필요가 없습니다.

InternalResouceViewResolver에는 jsp를 포워드할 수 있는 기능이 있습니다.)

 

 


 

 

뷰 리졸버 동작 방식

 

 

1. 핸들러 어댑터 호출
핸들러 어댑터를 통해 new-form 이라는 논리 뷰 이름을 획득.

 

2. ViewResolver 호출

new-form 이라는 뷰 이름으로 viewResolver를 순서대로 호출한다.
BeanNameViewResolver new-form 이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하는데 없다.

• InternalResourceViewResolver 가 호출된다.

 

3. InternalResourceViewResolver

이 뷰 리졸버는 InternalResourceView 를 반환한다.

 

4. 뷰 - InternalResourceView

InternalResourceView JSP처럼 포워드 forward() 를 호출해서 처리할 수 있는 경우에 사용한다.

 

5. view.render()

view.render() 가 호출되고 InternalResourceView forward() 를 사용해서 JSP를 실행한다

 

 

 

 

참고
InternalResourceViewResolver 는 만약 JSTL 라이브러리가 있으면 InternalResourceView 를
상속받은 JstlView 를 반환한다. JstlView 는 JSTL 태그 사용시 약간의 부가 기능이 추가된다.
참고
다른 뷰는 실제 뷰를 렌더링하지만, JSP의 경우 forward() 통해서 해당 JSP로 이동(실행)해야 렌더링이
된다. JSP를 제외한 나머지 뷰 템플릿들은 forward() 과정 없이 바로 렌더링 된다.
참고
Thymeleaf 뷰 템플릿을 사용하면 ThymeleafViewResolver 를 등록해야 한다. 최근에는 라이브러리만
추가하면 스프링 부트가 이런 작업도 모두 자동화해준다.