220709_Spring MVC

창고·2022년 7월 9일
0
post-custom-banner

1. Spring MVC

  • Spring MVC 는 Spring 에서 제공하는 웹 모듈로 Model, View, Controller 세 가지 구성 요소를 사용해 http request를 처리하고 단순한 텍스트 형식의 응답, REST 형식의 응답 등을 처리하며 View를 표시하는 HTML까지 리턴하는 응답을 할 수 있게 하는 프레임워크

2. Spring MVC의 구조

(1) 주요 구성과 기능

  • DispatcherServlet : http request를 처리할 Handler(Controller)를 지정

  • Handler(Controller) : http request를 처리, Model을 생성/저장 후 View를 지정

  • ModelAndView : Handler(Controller) 에 의해 반환된 ModelView가 묶은 객체

  • ViewResolver : ModelAndView를 처리하여 View를 그림

(2) 진행 흐름

  1. Client 측에서 http request 요청

  2. DispatcherServlet에서 http request를 처리할 Handler(Controller) 조회

  3. 조회된 Handler(Controller)를 실행할 수 있는 HandlerAdpater 조회 후 실행

  4. HandlerAdapterHandler를 직접 실행하며 Handler가 반환한 정보를 ModelAndView로 변환하여 DispatcherServlet 으로 반환

  5. DispatcherServletViewResolver를 호출하여 ModelAndView를 전달

  6. ViewResolverModel 에 저장된 데이터를 활용하여 View 객체를 생성, DispatcherServlet 으로 전달

  7. DispatcherServletrender(model)을 호출하여 View를 렌더링 한 후 최종적으로 Client에 전달

(3) DispatcherServlet

  • http request를 처리할 Handler(Controller)를 지정하는 Controller로 앞쪽에서 처리하는 컨트롤러라고 하여 Front Controller 라고도도 부름

(4) Handler(Controller)

  • http request를 처리, Model을 생성하여 저장하고 View를 지정

  • DispatcherServlet에 의해 배정된 Handler(Controller)http request를 처리, 필요한 데이터를 뽑아 Model에 저장하고 http가 보여줄 View Name을 지정 (혹은 View를 직접 반환)

  • 다만 이곳에서 ViewModel의 데이터를 세팅하지는 않음

(5) ModelAndView

  • Handler(Controller)에 의해 반환된 Model, View가 묶인 객체

  • ModelMap<String, Value> 형태의 데이터, 즉 Map 자료 구조로 http request 속의 데이터를 parsingKey-Value 쌍으로 만들어 저장

public ModelAndView(String viewName, @Nullable Map<String, V> model) {
	this.view = viewName;
    if(model != null) {
    	getModelMap().addAllAttributes(model);
    }
}
  • View, View NameViewResolver 에서 그릴 View를 지정함

  • 내부에 View 혹은 View Name이 있으나 View가 지정되더라도 데이터가 세탕된 View가 지정되지는 않음

(6) ViewResolver

  • ModelAndView 객체를 처리하여 View를 그림

  • Model에 저장된 데이터를 사용하여 View (사용자에게 보여줄 완성된 View)를 그리며 이는 그대로 유저에게 반환됨

레퍼런스

https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b
https://kotlinworld.com/326

profile
공부했던 내용들을 모아둔 창고입니다.
post-custom-banner

0개의 댓글