Spring, Request Handler..
HandlerMapping
http 의 요청정보를 이용해 핸들러를 찾아준다.
org.springframework.web.servlet.HandlerMapping 인터페이스의 구현해야한다.
public interface HandlerMapping {
String BEST_MATCHING_HANDLER_ATTRIBUTE = HandlerMapping.class.getName() + ".bestMatchingHandler";
String PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE = HandlerMapping.class.getName() + ".pathWithinHandlerMapping";
String BEST_MATCHING_PATTERN_ATTRIBUTE = HandlerMapping.class.getName() + ".bestMatchingPattern";
String INTROSPECT_TYPE_LEVEL_MAPPING = HandlerMapping.class.getName() + ".introspectTypeLevelMapping";
String URI_TEMPLATE_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".uriTemplateVariables";
String MATRIX_VARIABLES_ATTRIBUTE = HandlerMapping.class.getName() + ".matrixVariables";
String PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE = HandlerMapping.class.getName() + ".producibleMediaTypes";
@Nullable
HandlerExecutionChain getHandler(HttpServletRequest var1) throws Exception;
}
Spring 에서 제공하는 handler mapping
BeanNameUrlHandlerMapping
<bean name="/someurl/*" class="SomeController" />
<bean name="/otherurl/**/suburl" class="OtherController" />
ControllerBeanNameHandlerMapping
BeanNameUrlHandlerMapping 와 유사하지만 bean 이름 앞에 / 를 붙여준다.
ControllerClassNameHandlerMapping
bean 의 클래스 명에서 Controller 를 제외하고 url 매핑을 해준다.
SomeController -> some 에 매핑
SimpleUrlHandlerMapping
url 과 매핑되는 controller 를 직접 매핑시켜줄 수 있다.
DefaultAnnotationHandlerMapping
@RequestMapping 를 사용하는 전략이다.
HandlerAdapter
HandlerMapping 으로 찾은 handler 를 실행시켜주는 기능을 한다.
org.springframework.web.servlet.HandlerAdapter 인터페이스의 구현해야한다.
public interface HandlerAdapter {
boolean supports(Object var1);
@Nullable
ModelAndView handle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;
long getLastModified(HttpServletRequest var1, Object var2);
}
SimpleServletHandlerAdapter
javax.servlet.Servlet 의 구현체를 컨트롤러로 사용할때 사용되는 어뎁터이다. 기존 Servlet 을 spring 으로 이관할 때 사용한다.
public class SimpleServletHandlerAdapter implements HandlerAdapter {
public SimpleServletHandlerAdapter() {
}
public boolean supports(Object handler) {
return handler instanceof Servlet;
}
@Nullable
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
((Servlet)handler).service(request, response);
return null;
}
public long getLastModified(HttpServletRequest request, Object handler) {
return -1L;
}
}
HttpRequestHandlerAdapter
org.springframework.web.HttpRequestHandler 의 구현체의 어뎁터이다.
SimpleControllerHandlerAdapter
org.springframework.web.servlet.mvc.Controller 의 구현체의 어뎁터이다. 직접 구현하지말고 AbstractController 를 상속받아 사용하는 것이 권장된다.
AnnotationMethodHandlerAdapter
따로 타입이 정해져있지않다. DefaultAnnotationHandlerMapping 와 함께 쓴다. (같은 어노테이션 기반)
HandlerInterceptor
HandlerMapping 단위로 Intercepter 를 등록해 Controller 호출 전/후 작업을 지원한느 interface 이다.
org.springframework.web.servlet.HandlerInterceptor 의 구현해야한다.
HandlerMapping 단위기 때문에 Servlet Filter 와는 다르다.
