Spring MVC
는 Spring 에서 제공하는 웹 모듈로 Model
, View
, Controller
세 가지 구성 요소를 사용해 http request
를 처리하고 단순한 텍스트 형식의 응답, REST
형식의 응답 등을 처리하며 View
를 표시하는 HTML
까지 리턴하는 응답을 할 수 있게 하는 프레임워크 DispatcherServlet
: http request
를 처리할 Handler(Controller)
를 지정
Handler(Controller)
: http request
를 처리, Model
을 생성/저장 후 View
를 지정
ModelAndView
: Handler(Controller)
에 의해 반환된 Model
과 View
가 묶은 객체
ViewResolver
: ModelAndView
를 처리하여 View
를 그림
Client
측에서 http request
요청
DispatcherServlet
에서 http request
를 처리할 Handler(Controller)
조회
조회된 Handler(Controller)
를 실행할 수 있는 HandlerAdpater
조회 후 실행
HandlerAdapter
가 Handler
를 직접 실행하며 Handler
가 반환한 정보를 ModelAndView
로 변환하여 DispatcherServlet
으로 반환
DispatcherServlet
은 ViewResolver
를 호출하여 ModelAndView
를 전달
ViewResolver
는 Model
에 저장된 데이터를 활용하여 View
객체를 생성, DispatcherServlet
으로 전달
DispatcherServlet
은 render(model)
을 호출하여 View
를 렌더링 한 후 최종적으로 Client
에 전달
http request
를 처리할 Handler(Controller)
를 지정하는 Controller
로 앞쪽에서 처리하는 컨트롤러라고 하여 Front Controller
라고도도 부름http request
를 처리, Model
을 생성하여 저장하고 View
를 지정
DispatcherServlet
에 의해 배정된 Handler(Controller)
는 http request
를 처리, 필요한 데이터를 뽑아 Model
에 저장하고 http가 보여줄 View Name
을 지정 (혹은 View
를 직접 반환)
다만 이곳에서 View
에 Model
의 데이터를 세팅하지는 않음
Handler(Controller)
에 의해 반환된 Model
, View
가 묶인 객체
Model
은 Map<String, Value>
형태의 데이터, 즉 Map
자료 구조로 http request
속의 데이터를 parsing
해 Key-Value
쌍으로 만들어 저장
public ModelAndView(String viewName, @Nullable Map<String, V> model) {
this.view = viewName;
if(model != null) {
getModelMap().addAllAttributes(model);
}
}
View
, View Name
은 ViewResolver
에서 그릴 View
를 지정함
내부에 View
혹은 View Name
이 있으나 View
가 지정되더라도 데이터가 세탕된 View
가 지정되지는 않음
ModelAndView
객체를 처리하여 View
를 그림
Model
에 저장된 데이터를 사용하여 View
(사용자에게 보여줄 완성된 View)를 그리며 이는 그대로 유저에게 반환됨
https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b
https://kotlinworld.com/326