• 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的.

  • 相关阅读:
    常用数据结构之哈希表
    常用数据结构之队列
    常用的数据结构之栈
    常用的数据结构之链表
    Zabbix3.4监控Windows机器CPU使用率
    在Pycharm中导入第三方模块库(诸如:matplotlib、numpy等)
    WARNING: You are using pip version 20.2.4; however, version 20.3.1 is available.
    npm无法安装node-sass的解决方法
    常见的树形结构封装
    Mac安装MySql
  • 原文地址:https://www.cnblogs.com/trekxu/p/9119614.html
Copyright © 2020-2023  润新知