Spring MVC 구조에서 핸들러 매핑과 핸들러 어댑터를 좀더 자세히 살펴보자
과거버전의 스프링 컨트롤러를 이용해 핸들러 어댑터와 매핑을 이해해보자
public interface Controller {
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse
response) throws Exception;
}
@Component("/springmvc/old-controller")
public class OldController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("OldController.handleRequest");
return null;
}
}
스프링은 이미 필요한 핸들러 매핑과 어댑터를 대부분 구현해두었다.
0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.
0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리
2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리
위의 순서대로 찾는다.
우리가 보통 하는 프로젝트는 어노테이션 기반으로하기때문에 RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter를 사용한다.
위의 예시는 핸들러 어댑터와 핸들러 매핑이 어떤식으로 실행되는지 보기위해 자주 쓰지않는 방식으로 본것이고 실제로 대부분은 어노테이션 기반인 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter를 사용한다.