Java/SPRING

스프링 [Spirng] ViewResolver 인터페이스란

백엔드 신입사원( soft 5.10 입사) 2022. 1. 15. 14:51
반응형

스프링 컨트롤러는 뷰에 의존적이지 않다.

컨트롤러가 지정한 뷰 이름으로부터 응답 결과 화면을 생성하는 View 객체를 구할 때 사용되는 것이 ViewResolver이며 스프링은 몇 가지 ViewResolver 구현 클래스를 제공하고 있다.

ViewResolver 구현 클래스 

 

ViewResolver 인터페이스는 import된 util.Locale를 받아 정의되어 있다.


public interface ViewResolver {

View resolverViewName(String viewName, Locale locale) throws Exception;

}

ViewResolver은 뷰 이름과 지역화를 위한 Locale을 파라미터로 전달받으며 맵핑되는 View 객체를 리턴한다 맵핑되는 View 객체가 존재하지 않을경우 null을 리턴한다.

ViewResolver이 리턴하는 뷰 객체는 응답 결과를 생성하는 역할을 하고있고 , 모든 뷰 클래스는 View 인터페이스를 구현하고있는데, View인터페이스에 String getContentType();메서드는 "text/html"과 같은 응답 결과의 컨텐트 타입을 리턴한다. render()메서드는 실제로 응답 결과를 생성하고 메서드의 첫 번째 파라미터인 model에는 컨트롤러가 생성한 모델 데이터가 전달된다. 따라서 각각의 View 객체는 모델이 주는 데이터로부터 응답 결과를 생성하는 데 필요한 정보를 구한다.

InternalResourceViewResolver 클래스는 InternalResourceView 타입의 뷰 객체를 리턴하는데 이 뷰는 JSP or HtML 파일과 같이 웹 어플리 케이션의 내부 자원을 이용해서 응답 결과를 생성한다.

(web.xml에<servlet>과 같은 dispatcher설정으로 uri-pattern 을 걸어준뒤 )

(컨트롤러 등록 xml에 InternalResourceView, 즉 viewResolver을 통한 property를 설정해주면 된다.)

이후 InternalResourceViewResolver은 컨트롤러가 지정한 뷰 이름으로부터 실제로 사용될 뷰를 선택하여 컨트롤러가 지정한 뷰 이름 앞뒤로 prefix, suffix 프로퍼티를 추가한 값이 실제 사용될 자원의 경로가 된다.

BeanNameViewResolver 클래스는 뷰 이름과 동일한 이름을 갖는 빈을 뷰로 사용한다. 주로 커스텀View 클래스를 뷰로 사용해야 할 때 이용된다. (파일 다운로드를 위한 정보를 읽어 뷰에 전달하는 컨트롤러는 다운로드 관련 정보를 뷰에 전달한다.)

.java - return new ModelAndView(“download”, “downloadFile”, “downloadFile”);

controller.xml -

<bean id="download" class="net.mad.spring.downloadview"/>

BeanNameViewReslover은 이름이 download인 downloadview 객체를 뷰로 검색하며 dispatcherServlet는 downloadview를 이용해 downloadcontroller의 처리 결과를 출력해준다.

반응형