<Spring MVC 내용 정리>
* MVC (Model-View-Controller)
- Model: 뷰가 렌더링하는데 필요한 데이터
(ex. 사용자가 요청한 상품 목록이나, 주문 내역)
- View: 웹 애플리케이션에서 실제로 보이는 부분이며, 모델을 사용해 렌더링함
(ex. JSP, JSF, PDF, XML 등으로 결과 표현)
- Controller: 사용자의 액션에 응답하는 컴포넌트
모델을 업데이트하고, 다른 액션을 수행함
* DispatcherServlet
- 프론트 컨트롤러 (Front Controller)
- 클라이언트의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고
핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여줌
- 여러 컴포넌트를 이용해 작업을 처리함
* 요청 선처리 작업시 사용된 컴포넌트
- 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, AnnotationMethodHandlerAdapter 3가지
@RequestMapping과 @Controller 어노테이션을 통해 정의되는 컨트롤러의 경우
DefaultAnnotationHandlerMapping에 의해 핸들러가 결정되고,
그에 대응되는 AnnotationMethodHandlerAdapter에 의해 호출이 일어남
* 요청 처리시 사용된 컴포넌트
- org.springframework.web.servlet.ModelAndView
> ModelAndView는 Controller의 처리 결과를 보여줄 view와 view에서 사용할 값을 전달하는 클래스
- org.springframework.web.servlet.RequestToViewNameTranslator
> 컨트롤러에서 뷰 이름이나 뷰 오브젝트를 제공해주지 않았을 경우 URL과 같은 요청 정보를
참고해서 자동으로 뷰 이름을 생성해주는 전략 오브젝트
(디폴트는 DefaultRequestToViewNameTranslator)
* 예외 처리시 사용된 컴포넌트
- org.springframework.web.servlet.HandlerExceptionResolver
> 기본적으로 DispatcherServlet이 DefaultHandlerExceptionResolver를 등록
> HandlerExceptionResolver는 예외가 던져졌을 때 어떤 핸들러를 실행할 것인지에 대한 정보 제공
* 뷰 렌더링 과정시 사용된 컴포넌트
- org.springframework.web.servlet.ViewResolver
> 컨트롤러가 리턴한 뷰 이름을 참고해서
적절한 뷰 오브젝트를 찾아주는 로직을 가진 전략 오브젝트
뷰의 종류에 따라 적절한 뷰 리졸버를 추가로 설정해줄 수 있음
* DispatcherServlet을 FrontController로 설정하기
- web.xml 파일에 설정
- javax.servlet.ServletContainerInitializer 사용
> 서블릿 3.0 스펙 이상에서 web.xml 파일을 대신해서 사용할 수 있음
- org.springframework.web.WebApplicationInitializer 인터페이스를 구현해서 사용
'IT > Java' 카테고리의 다른 글
2021-03-10 일지2 (0) | 2021.03.10 |
---|---|
2021-03-10 일지1 (0) | 2021.03.10 |
2021-03-09 일지1 (0) | 2021.03.09 |
2021-03-08 일지1 (0) | 2021.03.08 |
2021-03-06 일지1 (0) | 2021.03.06 |