본문 바로가기
Spring/Spring MVC 5

ViewResolver

코동이 2020. 5. 25.

 

1. Request to DispatcherServlet : 사용자의 요청이 들어오면 먼저 Dispatcher Servlet이 요청한다.

2. Request to HandlerMapping : 그 요청이 어디 Controller로 보내야 하는지 요청한다.

3. Response Controller to DispatcherServlet : 해당 Controller가 어떤 것인지 반환한다.

4. Request to Controller : 해당 요청을 처리할 Controller에게 처리할 것을 요청한다.

5. Response ModeAndView to DispatcherServlet : model 객체와 view에 대한 정보를 DispatcherServlet에 반환한다.

6. Request View Name to ViewResolver : ViewResolver에게 ViewName에 따른 view를 찾도록 요청한다.

7. Response View to DispatcherServlet : Controller가 알려준 view가 어떤 것인지 반환받는다.

8. Request Model to View : View에게 해당 view에서 model 객체를 처리할 것을 요청한다.

9. Response to DispatcherServlet : view에서 model객체를 처리한 다음에 DispatcherServlet에 반환한다.

10. Response to Client : Client에게 요청에 대한 결과를 반환한다.

 

*특히 ModelAndView에 대한 역할이 중요한대, Controller가 view에 대한 정보와 model 객체에 대한 처리를 하기 때문이다. ModelAndView는 Request를 가지고 있으며, model 객체 처리에는 3가지 방법이 있다.

1. HttpServletRequest 2. Model(가장 많이 사용) 3. ModelAndView

 

1. HttpServletRequest

<TestController.java>
@GetMapping("/test1")
public String test2(HttpServletRequest request){
	request.setAttribute("data1", 100);
    request.setAttribute("data2", 200);
    return "test1";
}


==========================================================
<test1.jsp>
<h1>test1<h1>
<h3> data1 : ${ param.data1}</h3>
<h3> data2 : ${ param.data2}</h3>

setAttribute로 값을 설정하며, $안에서는 param으로 받는다.

 

2. Model

 

<TestController.java>

@GetMapping("/test2")
public String test2(Model model){
	model.addAttribute("data1", 300);
    model.addAttribute("data2", 400);
    return "test2";
}


===========================================
<test2.jsp>
<h1>test2</h1>
<h3>data1 : ${ requestScope.data1}</h3>
<h3>data2 : ${ requestScope.data2}</h3>

 

model은 setAttribute가 아닌 addAttribute를 사용한다. $안에서는 requestScope를 썼느데,

${data1}를 써도 무방하다. 요청에 의해 값이 정해졌다는 것을 명시적으로 알려주기 위해서이다.

 

3. ModelAndView

<TestController.java>

@GetMapping("/test3")
public ModelAndView test3(ModelAndView mv){
	mv.addObject("data1", 100);
    mv.addObject("data2", 200);
    mv.setViewName("test3");
    return mv;
}

=====================================================
<test3.jsp>

<h1>test3</h1>
<h3>data1 : ${requestScope.data1}</h3>
<h3?data2 : ${requestScope.data2}</h3>

ModelAndView는 model과 view를 한번에 해결한다. 특히 반환형은 String이 아닌 ModelAndView형이다.

또한 addObject로 객체를 설정하며, return에서 view를 설정하지 않고 setViewName을 통해 설정한다.

마지막에는 파라미터의 mv를 그대로 리턴한다.

반응형

'Spring > Spring MVC 5' 카테고리의 다른 글

Form 커스텀 태그  (0) 2020.05.25
커맨드 객체  (0) 2020.05.25
파라미터에 객체를 주입받기  (0) 2020.05.25
파라미터 추출하기  (0) 2020.05.25
URL Mapping  (0) 2020.05.24