
인프런 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 객체를 생성 후 반환합니다.

읽어주셔서 감사합니다.
레퍼런스
반응형
최근댓글