码迷,mamicode.com
首页 > 其他好文 > 详细

005 处理器适配器

时间:2018-06-01 00:19:10      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:info   clu   调用   exce   拦截器   let   simple   ret   nts   

一 . 概述

  在前面的讲解之中,我们知道HandlerMapping将所有的请求转换为了HandlerExecutionChain对象.

    这个对象之中包含一个Handler和一些拦截器对象.

本节就说明这个springmvc如何处理这些对象.


二 . HandlerAdapter  

public interface HandlerAdapter {

  //确定该适配器是否支持该处理器
    boolean supports(Object handler);
  //处理请求
    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

    long getLastModified(HttpServletRequest request, Object handler);

}

这是一个标准的适配器模式的实现.

我们看springmvc源码中是怎么调用的.  

protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
        for (HandlerAdapter ha : this.handlerAdapters) {
            if (logger.isTraceEnabled()) {
                logger.trace("Testing handler adapter [" + ha + "]");
            }
            if (ha.supports(handler)) {
                return ha;
            }
        }
        throw new ServletException("No adapter for handler [" + handler +
                "]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");
    }

springmvc源码会从备选的处理器适配器之中选择一个合适的适配器进行处理.


 三,备选的适配器

  技术分享图片

springmvc之中,默认使用下面的三个适配器.上面的那一个和RequestMappingHandlerMapping一样,都是为注解式开发准备的.

我们简要的看一下下面的三个实现类. 

public class SimpleControllerHandlerAdapter implements HandlerAdapter {

    @Override
    public boolean supports(Object handler) {
        return (handler instanceof Controller);

这个适配器是专门处理Controller的.

public class SimpleServletHandlerAdapter implements HandlerAdapter {

    @Override
    public boolean supports(Object handler) {
        return (handler instanceof Servlet);
    }

这个适配器是专门处理Servlet的.

public class HttpRequestHandlerAdapter implements HandlerAdapter {

    @Override
    public boolean supports(Object handler) {
        return (handler instanceof HttpRequestHandler);
    }

这个适配器是专门处理 HttpRequestHandler的.

 

005 处理器适配器

标签:info   clu   调用   exce   拦截器   let   simple   ret   nts   

原文地址:https://www.cnblogs.com/trekxu/p/9119614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!