클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고 DispatcherServlet은 클라이언트의 요청을 전달받는 창구 역할을 한다. 앞서 설명했듯이 DispatcherServlet은 클라이언트의 요청을 처리 할 컨트롤러를 찾기 위해 HandlerMapping을 사용한다.
컨트롤러를 찾아주는 객체의 타입은 ControllerMapping이어야 할 것 같은데 실제 타입은 HandlerMapping이다.
왜냐하면 스프링 MVC는 웹 요청을 처리할 수 있는 범용적인 프레임워크를 제공하고 있다.
이런 이유로 스프링 MVC는 웹 요청을 실제로 처리하는 객체를 핸들러(Handler)라고 표현하고 있으며, @Controller 적용 객체나 Controller 인터페이스를 구현한 객체 모두 스프링 MVC입장에서는 핸들러가 된다. 따라서, 특정 요청 경로를 처리해주는 핸들러를 찾아주는 객체를 HandlerMapping이라고 부른다.
DispatcherServlet은 핸들러 객체의 실제 타입에 상관없이, 실행 결과를 ModelAndView라는 타입으로만 받을 수 있으면 된다. 그런데 핸들러의 실제 구현 타입에 따라 ModelAndView를 리턴하는 객체도있고, 그렇지 않은 구현 객체도 있다.
따라서, 핸들러의 처리 결과를 ModelAndView로 변환해주는 객체가 필요하며, HandlerAdapter가 바로 이변환을 수행해준다.
핸들러 객체의 실제 타입마다 그에 알맞는 HandlerMapping과 HandlerAdapter가 존재하기 때문에, 사용할 핸들러의 종류에 따라 해당 HandlerMapping과 HandlerAdapter를 스프링 빈으로 등록해주어야 한다.
'IT > Spring' 카테고리의 다른 글
Bean 의존 관게 설정 법 /property와 constructor-arg 차이 - 사좋배 공유 (0) | 2019.07.02 |
---|---|
DispatcherServlet과 스프링 컨테이너 - 사좋배 공유 (0) | 2019.07.01 |
스프링 MVC 핵싱 구성 요소(스프링 MVC 흐름) - 사좋배 공유 (0) | 2019.07.01 |
Mysql 설치 및 eclipse 연동하기 - 사좋배 공유 (0) | 2019.06.24 |
@Resource 어노테이션이란? / @Resource @Autowired 차이점(@Resource vs @Autowired)-사좋배 공유 (0) | 2019.06.20 |