zoukankan      html  css  js  c++  java
  • Spring MVC请求处理架构图:

     https://www.cnblogs.com/zhiweiXiaomu/p/12484664.html

    https://blog.csdn.net/mrkohaku/article/details/79087688

      1、DispatchServlet:Spring MVC的核心控制器,作为SpringMVC请求处理以及请求返回的统一入口,进行全局的流程控制。

      2、HandlerMapping:处理映射器,根据请求的url映射到对应的处理器(Controller)的某个处理方法上,映射成功后返回一个HandlerExecutionChain对象(处理器执行链),其中包括处理器(Controller)以及拦截器。
      常用的HandlerMapping实现类:
        a、BeanNameUrlHandlerMapping: 根据url和Bean的name进行映射找到处理器对象Controller,Bean的name属性定义是已“/"开头,如:<bean name="/user/login.do" class="com.spring.web.controller.LoginController"/>,通常Controller要实现Controller接口,实现要处理请求的方法,与SimpleControllerHandlerAdapter联合使用。
        b、SimpleUrlHandlerMapping: 和BeanNameUrlHandlerMapping一样根据url和bean的name进行映射,但是功能更强大。
        c、DefaultAnnotationHandlerMapping: spring3.1之前spring2.5后使用,用于根据注解@Controller和@RequestMapping和url进行映射找到对应的处理器Controller和处理方法。
        d、RequestMappingHandlerMapping: spring3.1后使用,也是根据注解@Controller和@RequestMapping和url进行映射匹配对象的处理器Controller和处理方法。
          注意: HandlerMapping接口定义一个方法:
            HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
            由具体的HandlerMapping实现类来实现,其中定义了映射规则,根据映射规则找到合适的处理器对象和指定方法,最终返回一个HandlerExecutionChain 对象。
     
     
           DispatchServlet接收到请求后,会根据顺序遍历Spring容器中的HandlerMapping对象(可以注册多个HandlerMapping处理器映射器对象),根据每个HandlerMapping对象的映射规则找到对应的处理器Controller和处理方法,如当遍历到RequestMappingHandlerMapping对象时,RequestMapping HandlerMapping对象会遍历容器中的所有使用了@Controller注解的bean,在根据@RequestMapping注解和url进行匹配,找到对应的Controller对象和处理方法。当找到合适的Controller和处理方法后,则停止遍历HandlerMapping对象。
            DispatchServlet请求处理方法doDispatch()方法中实现:
             
     
             getHandler()方法实现,就是遍历所有HandlerMapping对象,进行处理器映射:    
     
    3、HandlerAdapter:处理器适配器,使用了适配器模式,将处理器映射器找到的处理器对象和处理方法适配成DispatchServlet所需要的请求处理方法(目标接口),这样DispatchServlet调用统一的请求处理接口完成请求处理,处理器适配器HandlerAdapter的功能就是将我们自定义的前端控制器Controller适配成DispatchServlet需要的接口。
                根据Spring MVC实现前端控制器的方式不同,则对应的适配器要不同,常见的HandlerAdapter有:
          a、SimpleControllerHandlerAdapter:要求Controller控制器实现Controller接口,以及实现接口中的方法handleRequest()方法来处理请求,通常和处理映射器BeanNameUrlHandlerMapping或者SimpleUrlHandlerMapping联合使用。
          b、DefaultAnnotationHandlerAdapter:适配使用注解@Controller和@RequestMapping标识的处理器,spring3.1之前spring2.5后使用,和DefaultAnnotationHandlerMapping联合使用。
          c、RequestMappingHandlerAdapter:适配使用注解@Controller和@RequestMapping标识的处理器,spring3.1后使用,替换了DefaultAnnotationHandlerAdapter,和RequestMappingHandler Mapping联合使用。
            注意:handlerAdapter接口中定义了几个方法,有具体处理器适配器来实现:
              boolean supports(Object handler);判断该适配器能否支持适配当前的处理器handler
              ModelAndView handle(HttpServletRequest request,HttpServletResponse  response, Object handler)throws Exception;DispatchServlet处理请求所需要的目标接口,在其方法实现中完成适配,来处理及准备ch处理器方法中的参数及Annotation,最后调用处理器的指定方法.
            DispatchServlet遍历HandlerMapping获取HandlerExecutionChain对象后,遍历spring容器中的所有HandlerAdapter对象,查看当前处理器适配器对象是否能够支持适配找到的处理器对象Controller,能则调用适配器的接口handle()方法处理请求,处理前有拦截器的先执行拦截处理
            DispatchServlet请求处理方法doDispatch()方法中实现:
     
            getHandlerAdapter()方法实现:
              
            
    4、ViewResolver:视图解析器,请求处理完后,DispatchServlet会受到请求处理结果(包括模型数据和逻辑视图),DispatchServlet会找到Spring容器中的ViewResolver对象将逻辑视图解析成物理页面文件。注意对于使用了@ResponseBody注解的方法,DispatchServlet会使用合适的消息转换器将请求处理结果转换后返回给前台。 
    5、DispatchServlet找到物理视图文件后,DispatchServlet使用视图模板引擎将模型数据渲染到物理视图页面中,最后DispatchServlet将渲染后的页面返回给前台,请求结束。 
  • 相关阅读:
    《C和指针》读书笔记——第一章 快速上手
    《C和指针》读书笔记——第三章 数据
    Linux下简易蜂鸣器驱动代码及测试实例
    Linux下GPIO驱动(五) misc_register();
    Linux下实现流水灯等功能的LED驱动代码及测试实例
    Linux下GPIO驱动(四) gpio_request();gpio_free();
    支持阻塞操作和轮询操作的globalfifo设备驱动代码分析以及测试代码
    基于等待队列及poll机制的按键驱动代码分析和测试代码
    Linux下GPIO驱动(一) 一个简单的LED驱动
    虚拟内存设备驱动memdev及实例代码
  • 原文地址:https://www.cnblogs.com/wcss/p/12772121.html
Copyright © 2011-2022 走看看