zoukankan      html  css  js  c++  java
  • SpringMVC工作原理2(代码详解)

              

                               图1.流程图

    1.当一个请求(request)过来,进入DispatcherServlet中,里面有个方法叫 doDispatch()方法 里面包含了核心流程

    源码如下:

    4.然后往下看getHandler():(DispatcherServlet.Java

      mapperHandler是  HandlerExecutionChain (处理器调用链) 类。

      HandlerExecutionChain 包含了处理器对象以及和处理器相关的拦截器,有目标方法和Handler。


      HandlerMapping 获取HandlerExecutionChina对象   源码的1120行(DispatcherServlet.java)。

      这里 1115行的 Handlermapping 定义了请求到处理器之间的映射,请求找到处理器就需要用到HandlerMapping。

    5.上面的代码执行完后又返回到932行,继续执行:

      这里将出现三种情况:

      一、当请求的url路径不存在时(没有对应的requestmapping注解方法)

      如果发的请求的映射是空的。返回的HandlerExecutionChain、mappedHandler对象为空表示没有对应的映射

    执行noHandlerFound方法


      经过这个方法  表示没有页面并且会进入404 错误页面

    二、 当请求的路径url不存在时(没有对应的requestmapping注解方法),applicationcontext.xml中存在以下注解时:

      经过上面的配置 则 getHandler()不是null,因为加上以上的配置,会调用SimpleUrlHandlerMapping 去寻找本地的静态资源,如css、js 等但是同样的路径不存在跳转到404页面。

    三、如果存在映射,继续执行之后的代码:

    6.执行到上面这行getHandlerAdapter()

      HandlerAdapter(Handler适配器)

      这个类进行了很多操作,比如表单到实体Bean的赋值,通过Binner进行了 数据的绑定。

    7.继续执行:954行preHandle().

    这里呢,底层调用了拦截器的 PreHandle方法,如图:

    8.然后继续执行到代码 959行(DispatcherServlet.java),handle()方法。

      这里呢就返回了一个ModelAndView,如果所示.

    9.随后代码继续执行 调用了拦截器的postHandler()方法 ,然后调用ProcessDispatchResult方法,如下图:

     

    继续执行

     

      然后继续执行 一直到代码 1027行(DisPatcherServlet.java)

    10.这里就是已经在渲染视图了render()方法

    这里通过在applicationcontext.xml中配置的视图解析器 进行了引用然后将页面进行了转发,

    上面的 rd.forward 就是进行了转发  然后整个流程就已经走完了!!!

  • 相关阅读:
    接口测试——Java + TestNG 国家气象局接口(json解析)实例
    log4j2配置文件解读
    ReportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法
    Jmeter脚本录制方法——手工编写脚本(jmeter与fiddler结合使用)
    SQL server学习(五)T-SQL编程之存储过程
    SQL server学习(四)T-SQL编程之事务、索引和视图
    Jmeter——关联(正则表达式)
    Jmeter脚本录制方法——Badboy录制&自带的代理服务器录制
    Jmeter——环境搭建
    SpringBoot系列之集成Dubbo示例教程
  • 原文地址:https://www.cnblogs.com/jing99/p/6280329.html
Copyright © 2011-2022 走看看