* Sprinv MVC
Model : 비지니스 로직을 처리하고 해당 내용을 담는 공간이다.
View : 클라이언트가 요청에 따른 화면에 Model에 저장된 결과를 나타낸다.
Controller : 클라이언트의 요청을 받는다.
* Spring MVC의 처리과정
- Client로부터 요청이 들어오면 DispatcherServlet이 호출된다.
- DispatcherServlet은 받은 요청을 HandlerMapping에 전달한다. 요청받은 URL을 분석하여 적합한 Controller를 찾는다.
- DispatcherServlet는 HandlerAdapter를 호출한다.
- HandlerApdater는 2번에서 찾은 Controller을 통해 비지니스 로직을 처리한다.(Service, DB 이용)
- 비지니스 로직을 처리하고 리턴된 결과가 보여지는 view의 이름을 리턴한다.
- DispatcherServlet은 ViewResolver를 호출하여 Controller가 리턴한 이름을 기반으로 view를 결정한다.
- DispatcherServlet은 View 객체에 처리결과를 넘겨 최종 결과를 보여주도록 요청한다.
- View 객체는 해당 View를 호출하고, 화면에 출력한 내용을 담은 Model 객체의 내용들을 view에 나타낸다.
*특히 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를 그대로 리턴한다.
* 출처
반응형
'학습 > Java' 카테고리의 다른 글
@Qualifier & @Resource & @Autowired (0) | 2021.08.12 |
---|---|
AOP (0) | 2021.08.11 |
IoC, DI (0) | 2021.08.08 |
ObjectMapper (0) | 2021.08.06 |
HTTP vs. WWW (0) | 2021.08.05 |