
DispatcherServlet이 스프링MVC에서 FrontController이고
이 DispatcherServlet이 스프링MVC의 핵심이다.
: DispatcherServlet도 결국에 HttpServlet을 상속받는다.
그리고 MVC의 로직은 DispatcherServlet.doDispatch() 코드에 다 있다고 생각하면 된다.
getHandler, getHandlerAdapter, view, view.render 등 MVC의 핵심 기능은 저기 다 있다.
1. 핸들러 조회
핸들러 매핑(RequestMappingHandlerMapping)을 통해 요청URL에 매핑된 핸들러(컨트롤러) 조회
2. 핸들러 어댑터 조회
핸들러를 실행할 수 있는 핸들러 어댑터(RequestMappingHandlerAdapter)를 조회
3. 핸들러 어댑터를 실행하고, 핸들러 어댑터가 실제 핸들러를 실행한다.
4. ModelAndView 반환
핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
ModelAndView : view와 view에 담아 보낼 값을 저장한다.
5. viewResolver 호출
뷰 리졸버를 찾고 실행하는데, JSP의 경우는 InternalResourceViewResolver가 사용되고
ThymeLeaf같은 경우는 또 별도의 viewResolver가 존재한다.
6. View 반환
뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고,
렌더링 역할을 담당하는 뷰 객체를 반환한다.
7. 뷰 렌더링
뷰를 통해서 뷰를 렌더링 한다.
@RequestMapping을 사용하는 유연한 컨트롤러

@Controller
@RequestMapping
ModelAndView
addObject()를 사용하여 다음과 같이 하면 된다.ModelAndView mv = new ModelAndView("~");
mv.addObject("member", member);
ModelAndView가 아니라 View는 String값으로 반환시키고, Model은 Model model 객체로 따로 처리한다.
나는 처음 Spring으로 개발할 때 V3 방식으로 해서 V3가 조금 더 친숙하게 느껴진다.
@RequestParam = request.getParameter("username")이라고 생각하면 된다.
😅 거의 RequestMapping으로 쓰는 경우는 없는 것 같다. @GetMapping, @PostMapping, @PutMapping 이렇게 사용하는데 저 애노테이션들 안에도 결국엔 RequestMapping(method=~~) 이렇게 선언이 되어 있다.