zoukankan      html  css  js  c++  java
  • 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的.

  • 相关阅读:
    ScrollView 字典
    centos 6.x 安装redis
    Linux 添加epel源
    Linux 关于解压
    Linux 删除文件夹
    Linux sz rz
    让div 实现 input效果
    解决js浮点数计算bug
    键盘绑定事件和焦点处理
    npm的镜像替换成淘宝
  • 原文地址:https://www.cnblogs.com/trekxu/p/9119614.html
Copyright © 2011-2022 走看看