핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
핸들러 실행 : 핸들러 어댑터가 실행한다.
ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
viwResolver 호출 : 뷰 리졸버를 찾고 실행한다.
View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
뷰 렌더링 : 뷰를 통해서 뷰를 렌더링 한다.
HandlerMapping 과 HandlerAdapter
핸들러 매핑은 DispatcherServlet이 요청에 맞는 핸들러를 찾는 과정이다.
핸들러 어댑터는 핸들러 매핑에서 찾은 핸들러 객체를 다룰 수 있는 어댑터이다.
다양한 핸들러의 return 타입은 String, ModelAndView 등 다양하며, Parameter로 들어오는 값도 HttpServletRequest로 받거나 HttpServletResponse로 받는 등 다양한 형식으로 받을 수 있다.
이러한 다양한 핸들러별 매핑과 어댑터가 스프링에서 지원을 하고있다.
ViewResolver
뷰리졸버는 컨트롤러에서 String으로 반환시 논리적 이름을
물리적경로로 반환하는 역할이다.
@RequestParam : HTTP 요청 파라미터를 사용 가능
ex) public String save(@RequestParam("name") String name)
@RequestMapping : 요청 정보를 매핑한다.
해당 URL이 호출되면 메서드가 호출된다.
핸들러 매핑,핸들러 어댑터중 우선순위가 가장 높다.
클래스,메서드 레벌에서 사용가능
ex) @RequestMapping("/home")
@GetMapping / @PostMapping : @RequestMapping + HTTP 메서드 구분
@PathVariable : 특정 URL 경로를 @PathVariable로 매칭하여 사용
ex) URL : /users/{userId} -> /users/1
@GetMapping("/users/{userId}")
public String userList(@PathVariable("userId") String userId)
@ModelAttribute : 해당 객체를 생성하고, 해당 객체의 프로퍼티를 찾는다.
해당 프로퍼티의 setter를 이용하여 파라미터 값을 바인딩
모델에 지정한 객체를 저장 (model.addAttribute("users",users))
ex) Users라는 클래스에 username,age가 있는 경우
public String userView(@ModelAttribute Users users)
사용시 Users라는 객체가 생성되고, 요청 파라미터의 값도 저장되어있다.
@RestController : @Controller + @ResponsBody