스프링 [Spirng] ViewResolver 인터페이스란
스프링 컨트롤러는 뷰에 의존적이지 않다.
컨트롤러가 지정한 뷰 이름으로부터 응답 결과 화면을 생성하는 View 객체를 구할 때 사용되는 것이 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의 처리 결과를 출력해준다.