上一篇 <<<SpringMVC异步实现方式
下一篇 >>>SpringBoot核心设计理念和核心组件
1.继承Controller方式所使用的适配器:SimpleControllerHandlerAdapter
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return ((Controller) handler).handleRequest(request, response);
}
}
2.继承HTTP请求处理器的适配器:HttpRequestHandlerAdapter
public class HttpRequestHandlerAdapter implements HandlerAdapter{
public boolean supports(Object handler) {
return (handler instanceof HttpRequestHandler);
}
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((HttpRequestHandler) handler).handleRequest(request, response);
return null;
}
}
3.注解方式(@Controller)的处理器适配器:RequestMappingHandlerAdapter
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter{
protected boolean supportsInternal(HandlerMethod handlerMethod) {
return true;
}
protected ModelAndView handleInternal(HttpServletRequest request,
HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {
return invokeHandlerMethod(request, response, handlerMethod);
}
}
public abstract class AbstractHandlerMethodAdapter implements HandlerAdapter{
public final boolean supports(Object handler) {
return (handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler));
}
public final ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return handleInternal(request, response, (HandlerMethod) handler);
}
}
4.继承servlet方式的适配器:SimpleServletHandlerAdapter
public class SimpleServletHandlerAdapter implements HandlerAdapter {
public boolean supports(Object handler) {
return (handler instanceof Servlet);
}
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((Servlet) handler).service(request, response);
return null;
}
}
为什么SpringMVC需要使用适配器调用handler具体方法
if(hanlder instanceof Controller){
// 执行Controller适配器
}
if(hanlder instanceof HttpControler){
// 执行我们的HttpController
}
if(hanlder instanceof ServletControler){
// 执行我们的HttpController
}
if(hanlder instanceof AnnotationControler){
// 执行我们的AnnotationController
}
推荐阅读:
<<<Spring Servlet相关知识
<<<Spring原理汇总及零碎知识点
<<<Web项目的启动方式汇总
<<<SpringMVC底层无web.xml启动原理分析
<<<SpringMVC运行流程
<<<DispatcherServlet执行原理分析
<<<过滤器与拦截器的区别
<<<SpringMVC拦截器的用法
<<<SpringMVC异步实现方式
<<<@Async注解的失效之谜