005 处理器适配器

一 . 概述

  在前面的讲解之中,我们知道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的.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9119614.html
005
今日推荐