zoukankan      html  css  js  c++  java
  • Spring MVC 工作原理--自我理解

    一个Http请求,大致分为请求->响应过程,其中SpringMvc框架接受请求,处理一系列事情后响应给客户端。

    大家都知道,Tomcat启动监听读取web.xml配置文件,其中servlet配置<load-on-startup>1</load-on-startup> 随服务启动而自动加载org.springframework.web.servlet.DispatcherServlet。

    DispatcherServlet是个关键,没有它就没有SpringMvc应用。它里面包含很多,其中关键点有个HandlerMapping,它是个接口。负责的是@RequestMapping,请求路由处理器。

    首先先来了解下annotation-driven 注解驱动

    1. <mvc:annotation-driven/>

    annotation-driven 注解驱动 在xml中肯定有,那为啥要写,有啥关联?

    其实就是帮我们注册了DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter (可能这2个已经过时了,不过没关系,知道原理就行)

    过时现在最新对应的是RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter ,这更好理解。

    RequestMappingHandlerMapping :看源代码肯定是实现了HandlerMapping接口,它会处理@RequestMapping 注解,并将其注册到请求映射表中

     

     。。。。

    继承很多

    RequestMappingHandlerAdapter:看源代码肯定是实现了HandlerAdapter接口,则是处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。说白了就是依赖注入处理,

    扫描到的@Component@Controller@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。

    总结: 

    1、说白了注解驱动就干了2件很关键的事情,一个是路由匹配,另一个是注解依赖注入。

    2、结合DispatcherServlet 来看,就是DispatcherServlet 中有一个HandlerMapping接口,annotation-driven去实现它,然后Tomcat 服务启动后自动加载annotation-driven 中的2个bean

    Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成,其工作原理如图 1 所示

      从图 1 可总结出 Spring MVC 的工作流程如下:

    1. 客户端请求提交到 DispatcherServlet。
    2. 由 DispatcherServlet 控制器寻找一个或多个 HandlerMapping,找到处理请求的 Controller。
    3. DispatcherServlet 将请求提交到 Controller。
    4. Controller 调用业务逻辑处理后返回 ModelAndView。
    5. DispatcherServlet 寻找一个或多个 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。
    6. 视图负责将结果显示到客户端。

    再看一张流程图,上下2张结合看,更清楚。

     

  • 相关阅读:
    jstree单选功能的实现方法
    JavaScript之HTML DOM Document 对象
    任意用户密码重置漏洞
    MESSAGE_TYPE_X dump in RSM_DATASTATE_CHECK -6-
    高版本Visual Studio和低版本ArcGIS共存 工具箱没有控件的解决方法
    定制Dynamics 365 Portal 界面
    从组件文档引发的惨案 ◤1◢
    图文结合深入理解 JS 中的 this 值
    js获取时间差值
    vscode 同步扩展插件
  • 原文地址:https://www.cnblogs.com/zjtao/p/12175157.html
Copyright © 2011-2022 走看看