스프링 mvc 구조
- FrontController -> DispatcherServlet
- handlerMappingMap -> HandlerMapping
- MyHandlerAdapter -> HandlerAdapter
- ModelView -> ModelAndView
- viewResolver -> ViewResolver
- MyView -> View
DispatcherServlet이 제일 중요함
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
- 스프링은 서블릿을 모든 경로에 대해 자동으로 매핑함
- DispatcherServlet에서 doDispatch() 호출
- 스프링 mvc 강점: DispatcherServlet 코드 변경 없이 원하는 기능을 변경하거나 확장 가능함
핸들러 매핑과 어댑터
Controller 인터페이스는 @Controller 애노테이션과는 전혀 다름
@Component : 이 컨트롤러는 /springmvc/old-controller 라는 이름의 스프링 빈으로 등록되었다.
빈의 이름으로 URL을 매핑할 것이다.
컨트롤러가 호출되기 위해 필요한 2가지
- HandlerMapping(핸들러 매핑)
- 핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 한다.
- 예) 스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요하다.
- HandlerAdapter(핸들러 어댑터)
- 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다.
- 예) Controller 인터페이스를 실행할 수 있는 핸들러 어댑터를 찾고 실행해야 한다.
-
OldController 핸들러 매핑, 어댑터
- HeaderMapping = BeanNameUrlHandlerMapping
- HeaderAdapter = SimpleControllerHandlerAdapter
-
HttpRequestHandler 핸들러 매핑, 어댑터
- HeaderMapping = BeanNameUrlHandlerMapping
- HeaderAdapter = HttpRequestHandlerAdapter
@RequestMapping: 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping, RequestMappingHandlerAdapter 이다.
뷰리졸버
- BeanNameViewResolver: 빈 이름으로 찾아서 반환 (엑셀 파일 생성 기능)
- InternalResourceViewResolver: JSP를 처리할 수 있는 뷰 반환
- InternalResourceView는 JSP처럼 forward()를 호출해 처리할 수 있는 경우 사용함