Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.





ViewResolver

ViewResolver는 어떻게 뷰 페이지가 렌더링 되는지를 해결해줍니다.

컨트롤러에서 return으로 응답할 뷰 페이지의 경로를 문자열로 작성하면 클라이언트로 해당 JSP가 렌더링 되었습니다.


ViewResolver는 바로 이 과정을 해결해줍니다.





요청이 오면 DispatcherServlet은 HTTP 요청에 따라 doGet( ) 메서드가 실행이 될 것입니다.

이 때 클라이언트로 응답할 문서를 보내는 과정은 다음과 같습니다.

1) 메서드가 반환하는 문자열을 파악한 후 해당 경로의 View 객체를 ViewResolver로부터 얻습니다.

2) JSP 파일에서 사용해야 하는 데이터가 있다면 Model 객체로 부터 데이터를 가져와 View 객체에 추가합니다.


ViewResolver는 View 객체를 반환하는 역할을 합니다.

데이터를 추가하고 렌더링하는 과정은 DispatcherServler의 doGet() 메서드에서 일어나죠.





ViewResolver 설정

그런데 지금까지 ViewResovler에 관련된 설정을 하지 않았는데도 정상적으로 응답이 되었습니다.

그 이유는 기본 값으로 ViewResolver가 등록되어 있기 때문입니다.


InternalResourceViewResolver 객체는 Default ViewResolver이며, JSP를 뷰로 사용할 때 쓰입니다.

이로 미루어 보아 더 많은 ViewResolver가 있다는 것을 알 수 있는데, 가장 많이 사용되는 것이 InternalResourceViewResolver 이므로 이에 대한 설정을 해보도록 하겠습니다.



spring-servlet.xml

<!-- JSTL view -->

<bean id='viewResolver' class='org.springframework.web.servlet.view.InternalResourceViewResolver'>

        <property name='viewClass' value='org.springframework.web.servlet.view.JstlView' />

        <property name='prefix' value='/WEB-INF/views/' />

        <property name='suffix' value='.jsp' />

        <property name='order' value='1' />

</bean>

bean을 직접 등록하는 코드입니다.

viewResolver 라는 이름의 bean은 실제로 InternalResourceViewResolver 클래스이며,

viewClass로는 JSTLView를 사용하고,

prefix( 경로의 앞 부분)는 /WEB-INF/views/ ,

suffix( 경로의 뒷 부분)은 .jsp 을 의미합니다.



이와 같이 bean을 등록하면 Controller에서 반환하는 문자열을 간단하게 작성할 수 있습니다.

prefix인 /WEB-INF/views 와 suffix인 .jsp를 생략할 수 있습니다.






이상으로 ViewResolver가 무엇인지, 렌더링이 어떻게 이루어지는지 알아보았고 ViewResolver를 설정해보았습니다.

방명록 애플리케이션에서 ViewResolver를 설정함으로써 바뀐 것은 컨트롤러에서 뷰 페이지를 응답할 때 간단하게 작성할 수 있다는 것입니다.