인프런 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 객체를 생성 후 반환합니다.
읽어주셔서 감사합니다.
레퍼런스
반응형
최근댓글