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

  • 相关阅读:
    mariadb数据库galera群集配置
    视频降噪处理
    测试
    WPF RichTextBox
    WPF ListBox
    WPF SelectedIndex
    项目-答题
    Show 或者 ShowDialog时出现的错误
    项目-数据库实体生成器
    Alfred 使用教程
  • 原文地址:https://www.cnblogs.com/trekxu/p/9119614.html
Copyright © 2020-2023  润新知