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

  • 相关阅读:
    一个很好的博客 -----------------十年风雨,一个普通程序员的成长之路(五)
    项目中遇到的问题-----时间间隔查询
    不懂CPU工作原理又如何 ---CSDN
    鸿蒙OS横空出世-----
    关于项目中遇到的问题-- excel工具选择
    关于项目中遇到的问题-- 百度disconf 分布式配置中心
    SpringBoot使用邮件发送
    SpringBoot使用OkHttp
    Java8 获取当天日期的前一天
    如何将数字转为百分比?
  • 原文地址:https://www.cnblogs.com/trekxu/p/9119614.html
Copyright © 2011-2022 走看看