Spring MVC 기본동작 흐름
Dispatcher Servlet의 동작과정
요청을 받는다 → Locale 결정(헤더에서 받은 정보 ex)언어정보로 페이지 언어설정) → Request Holder에 요청 저장
→ Flash Map복원(Parameter 정보를 일시적(1번) 저장/전송 가능) → 멀티파트 요청(Y/N ; Multipart Resolver가 멀티파트 결정 / 핸들러 결정,실행) → Handler ExcutionChain 결정 → Handler Execution Chain실행 → 예외처리 → 뷰렌더링 → 요청종료 → 요청 처리완료
<개략적 흐름>
<내부 흐름 : 요청 선처리 작업>
org.springframework.web.servlet.LocaleResolver
지역 정보를 결정해주는 전략 오브젝트이다.
디폴트인 AcceptHeaderLocalResolver는 HTTP 헤더의 정보를 보고 지역정보를 설정해준다.
org.springframework.web.servlet.FlashMapManager
FlashMap객체를 조회(retrieve) & 저장을 위한 인터페이스
RedirectAttributes의 addFlashAttribute메소드를 이용해서 저장한다.
리다이렉트 후 조회를 하면 바로 정보는 삭제된다.
org.springframework.web.context.request.RequestContextHolder
일반 빈에서 HttpServletRequest, HttpServletResponse, HttpSession 등을 사용할 수 있도록 한다.
해당 객체를 일반 빈에서 사용하게 되면, Web에 종속적이 될 수 있다.
org.springframework.web.multipart.MultipartResolver
멀티파트 파일 업로드를 처리하는 전략
<내부 흐름 : 요청 전달>
org.springframework.web.servlet.HandlerMapping
HandlerMapping구현체는 어떤 핸들러가 요청을 처리할지에 대한 정보를 알고 있다.
디폴트로 설정되는 있는 핸들러매핑은 BeanNameHandlerMapping과 DefaultAnnotationHandlerMapping 2가지가 설정되어 있다.
org.springframework.web.servlet.HandlerExecutionChain
HandlerExecutionChain구현체는 실제로 호출된 핸들러에 대한 참조를 가지고 있다.
즉, 무엇이 실행되어야 될지 알고 있는 객체라고 말할 수 있으며, 핸들러 실행 전과 실행 후에 수행될 HandlerInterceptor도 참조하고 있다.
org.springframework.web.servlet.HandlerAdapter
실제 핸들러를 실행하는 역할을 담당한다.
핸들러 어댑터는 선택된 핸들러를 실행하는 방법과 응답을 ModelAndView로 변화하는 방법에 대해 알고 있다.
디폴트로 설정되어 있는 핸들러어댑터는 HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, AnnotationMethodHanlderAdapter 3가지이다.
@RequestMapping과 @Controller 애노테이션을 통해 정의되는 컨트롤러의 경우 DefaultAnnotationHandlerMapping에 의해 핸들러가 결정되고, 그에 대응되는 AnnotationMethodHandlerAdapter에 의해 호출이 일어난다.
org.springframework.web.servlet.handlerexceptionresolver
기본적으로 DispatcherServlet이 DefaultHandlerExceptionResolver를 등록한다.
HandlerExceptionResolver는 예외가 던져졌을 때 어떤 핸들러를 실행할 것인지에 대한 정보를 제공한다.
<내부흐름 : 뷰 렌더링>
org.springframework.web.servlet.ViewResolver
컨트롤러가 리턴한 뷰 이름을 참고해서 적절한 뷰 오브젝트를 찾아주는 로직을 가진 전략 오프젝트이다.
뷰의 종류에 따라 적절한 뷰 리졸버를 추가로 설정해줄 수 있다.
<내부흐름 : 요청처리 종료>
'Road to Developer > edwith풀스택웹개발자' 카테고리의 다른 글
27. 스프링 MVC패턴을 이용해 방명록 만들기 2 (기본설정 web.xml, pom.xml, Config ) (0) | 2018.07.25 |
---|---|
26. 스프링 MVC패턴을 이용해 방명록 만들기 1 (요구사항 / 내부흐름) (0) | 2018.07.24 |
24. Spring Framework (0) | 2018.07.23 |
23. 객체(Object), 배열(Array) for-in 탐색하기 (0) | 2018.07.20 |
22. 자바스크립트 배열 (0) | 2018.07.19 |