Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.
- [Spring] 방명록 애플리케이션 (1) - 환경 설정
- [Spring] 방명록 애플리케이션 (2) - 준비 단계 ( 스프링 활용하기 )
- [Spring] 방명록 애플리케이션 (3) - 구현
- [Spring] 방명록 애플리케이션 (4) - 정적 파일 처리 ( DefaultServletHandler )
- [Spring] 방명록 애플리케이션 (5) - 뷰 객체 생성 ( ViewResolver )
- [Spring] 방명록 애플리케이션 (6) - 예외 처리 ( ExceptionHandler )
- [Spring] 방명록 애플리케이션 (7) - 3 Layer Architecture와 Service 계층
- [Spring] 방명록 애플리케이션 (8) - 커넥션 풀 ( Connection Pool ) DBCP
- [Spring] 방명록 애플리케이션 (9) - Mybatis 환경 설정
- [Spring] 방명록 애플리케이션 (10) - Mybatis 적용
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를 설정함으로써 바뀐 것은 컨트롤러에서 뷰 페이지를 응답할 때 간단하게 작성할 수 있다는 것입니다.