Back-end/JAVA,Spring

[java spring] ModelAndView 모델앤뷰 / ViewResolver뷰리졸버 란 ?

cheersHena 2019. 4. 14. 18:07
반응형

ModelAndView

  • 컨트롤러 처리 결과 후 응답할 view와 view에 전달할 값을 저장 및 전달하는 클래스 

1 주요 생성자

생성자

역할

ModelAndView(String viewName)

응답할 view

ModelAndView(String viewName, Map values)

응답할 view와 view로 전달할 값들을 저장한 Map 객체

ModelAndView(Stirng viewName, String name, Object value)

응답할 view이름, view로 넘길 객체의 name 과 value

2 주요 메소드

메소드

역할

setViewName(String view)

응답할 view이름 설정

addObject(String name, Object value)

view에 전달할 값을 설정

addAllObject(Map values)

view에 전달할 값을 Map에 name-value로 저장하여 한번에 설정

3 Redirect 방식 전송

- view이름 앞에 redirect: 입력.
- ex) mv.setViewName("redirect:/home.jsp");


ViewResolver

  • View 이름으로부터 사용할 View Object를 매핑하는 역할.
  • 특정 ViewResolver를 Bean으로 등록하지 않으면, DispatcherServlet은 기본 viewResolver인 InternalResourceView를 사용한다.

- Controller는 ModelAndView 객체에 응답할 view이름을 넣어 Return (setViewName) - DispatcherServlet은 ViewResolver에게 응답할 view를 요청한다. - ViewResolver는 View이름을 이용해 알맞은 view객체를 찾아 DispatcherServlet에게 전달.

 

1 InternalResourceViewResolver(default)

- jsp나 html등의 내부자원 이용해 뷰 생성
- InternalResourceView를 기본 뷰로 사용

ex) ViewResolver설정

 [applicationContext.xml]  
<bean id ="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">     
<property name="prefix" value="/WEB-INF/jsp/">      
<property name="suffix" value=".jsp">  
</bean>
[Controller.java] ModelAndView mv = new ModelAndView(); mv.setViewName("hello");

위 설정의 경우 viewResolver는 /WEB-INF/jsp/hello.jsp 경로의 jsp view를 찾는다.


2 BeanNameViewResolver

 - 뷰의 이름과 동일한 이름 가지는 빈을 view로 사용.
 - 사용자 정의 View객체를 사용하는 경우 사용.

ex) 

1.컨트롤러에서 CommonFile 클래스의 getDownLoadView 메소드 호출
  • [UserManagementController.java]
return CommonFile.getDownloadView(file, fileName); 

2.commonFile클래스에서 ModelAndView 리턴
  • [CommonFile.java]

     public static ModelAndView getDownloadView(File file, String fileName) { CommonFile downloadFile = new CommonFile(); downloadFile.setFile(file); //파일경로
            downloadFile.setFileName(fileName); //파일이름 
            ModelAndView mav = new ModelAndView(); //모델엔뷰 객체생성
            mav.setViewName("download"); // 응답할 view이름 설정"download"  mav.addObject("downloadFile", downloadFile); // view에 전달할 값 
            return mav; // modelAndView return 
     }
    

3. [applicaitonContext.xml] BeanNameViewResolver 설정
   <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
         <property name="order" value="0" /> //우선순위 0. 
   </bean> 

뷰의 이름과 동일한 이름 가지는 빈을 view객체로 사용하도록 설정한다.


4.View객체로 사용할 bean 설정.
  <!-- 다운로드 View -->      
<bean id="download" class="com.imoxion.sensmail.web.common.DownloadView"/> 

위와 같이 빈을 등록하면 download라는 이름으로 view를 호출했을 때 지정한 클래스를 객체로 사용
"downlaod" 빈 설정을 해준다. -> DownLoadView 클래스를 탄다.

[DownLoadView.java]클래스를 타고 최종적으로 파일을 다운로드 하는 작업을 실행하게 된다..!! 



3 XmlViewResolver

 - BeanNameViewResolver 와 동일하나, 뷰 객체를 xml파일에 설정해 놓는 차이.
 - Bean등록시 location properties에 xml 파일을 지정.





반응형