인프런 MVC 1편 강의를 듣고 ModelAndView 를 처리하는 프로세스를 정리하였습니다.

 

1. Model & View 개념

  • Model : 비즈니스 로직이나 데이터 접근을 통해 뷰에 출력할 데이터 관리하는 객체
  • View : 모델에 담겨있는 데이터를 사용해서 HTML 렌더링하기 위한 객체
즉 뷰가 필요한 데이터를 모델이 전달해주는 덕분에 뷰는 화면을 렌더링 하는 일에 집중할 수 있습니다.

2. ModelAndView 객체

DispatcherServlet 의해 처리될 뷰를 지정할 있고 Model에 설정된 데이터를 전달 있도록 지원합니다.

setViewName(String view) 응답할 view 이름을 설정
addObject(String name, Object value) view에 전달할 값을 설정
addAllObject(Map values) view에 전달할 값을 Map에 name-value로 저장하여 한번에 설정

 

ModelAndView를 반환하는 예제 소스 (권장하지 않음)

@Controller
@RequestMapping("/springmvc/v1/members")
public class SpringMemberController {
    
    @RequestMapping
    public ModelAndView members() {
        List<Member> members = memberRepository.findAll();
        ModelAndView mav = new ModelAndView("members");	// viewName 설정
        mav.addObject("members", members); // model 데이터 추가
        return mav;
    }
}

ModelAndView를 직접 반환하지 않는 예제 소스

@Controller
public class SpringMemberController {

    //viewResolver가 viewName을 members로 인식
    @GetMapping("/springmvc/v2/members")
    public String members(Model model) {
    	List<Member> members = memberRepository.findAll();
        model.addAttribute("members", members);
        return "members";
	}
    
    //viewResolver가 viewName을 url 경로(hello)로 설정
    @RequestMapping("/hello")
    public void members(Model model) {
    	List<Member> members = memberRepository.findAll();
        model.addAttribute("members", members);
	}
}

3. ViewResolver 객체

스프링 부트는 InternalResourceViewResolver  리졸버를 빈으로 자동으로 등록해주며,

application.properties  설정한 spring.mvc.view.prefix , spring.mvc.view.suffix 정보를 반영합니다. 

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

컨트롤러에서 return 객체 타입이 Void, String, ModelAndView인 경우

뷰 리졸버가 ViewName 기반으로 View 객체를 생성 후 반환합니다.

읽어주셔서 감사합니다.

 

레퍼런스
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기