public String home(Model model) { ... }
public String home(HttpServletRequest request, HttpServletResponse response) { ... }
public String home(HttpSession session) { ... }
public String home(Locale locale) { ... }
public String list(int page) { }
<form method="post" action="login"
<input type="text" name="id">
<input type="password" name="password">
<button type="submit">로그인</button>
</form>
@PostMapping("/login")
public String login(String id, String password) { }
@GetMapping("/")
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
mav.addObject("msg", "홈페이지 방문을 환영합니다.");
mav.setViewName();
return mav;
}
// 요청핸들러 메서드가 반환하는 ModelAndView객체를 DispatcherServlet에게 전달한다.
@GetMapping("/")
public String home() {
return "home";
}
// ModelAndView 객체를 생성한다.
// 요청핸들러 메서드가 반환하는 값을 viewName으로 저장하고, DispatcherServlet에게 전달한다.
// ModelAndView
// Object View <--- "home"
// ModelMap model <--- null
@GetMapping("/")
public String home(Model model) {
model.addAttribute("msg", "홈페이지 방문을 환영합니다.");
return "home";
}
// 요청핸들러 메서드 호출 전에 미리 Model 객체를 생성하고, 요청핸들러 메서드의 매개변수로 전달한다.
// ModelAndView 객체를 생성한다.
// 미리 생성해둔 Model객체를 ModelAndView에 저장한다.
// 요청핸들러 메서드가 반환하는 값을 viewName으로 저장하고, DispatcherServlet에게 전달한다.
// ModelAndView
// Object View <--- "home"
// ModelMap model <--- Model - {msg:"홈페이지 방문을 환영합니다."}
Model(Data) ---> View ---> HTML, JSON, XML...
---------> 탐색(호출)
┍ HandlerAdapter ┑ ┍ MapperProxy ┑
DispatcherServlet ---> Controller ---> Service ---> Mapper
└ HandlerMapping ┘
<--------- 값 전달(매개변수를 통해)
DispatcherServlet <--- Controller <--- Service <--- Mapper
└ Model 객체 생성 ┘
└ ViewResolver ┘ └ ModelAndView ┘
위 과정을 거쳐 DispatcherServlet이 View를 실행해
Model에 저장된 정보를 요청객체의 속성으로 저장하고 JSP로 내부이동하게 된다.
최종적으로 JSP에서 EL, JSTL을 통해 값을 획득할 수 있다.
Spring MVC 컴포넌트 간의 관계와 흐름
Spring MVC Architecture