*2、请求处理底层原理-SpringBoot2一次请求到响应的具体步骤(以model和Map举例)

  1. 接第1个问题点中的参数匹配对应的argumentresolvers(参数解析器)开始总结,循环遍历后得到model和Map的参数解析器进行参数解析

    • model的参数解析器:ModelMethodProcessor ;map的参数解析器:MapMethodProcessor ;这两个参数解析器分别通过判断是不是model.class类型和Map.class类型。

    • 每一个参数解析器都有会重写resolveArgument方法来解析我们的参数,通过源码看出ModelMethodProcessor和MapMethodProcessor 最终都会调用一个mavContainer.getModel()方法,该方法返回的是一个ModelMap对象new了一个BindingAwareModelMap

  2. 通过在Handler中的15个返回值处理器调用handleReturnView返回一个view

    • handleReturnView方法中调用selectHandler获得一个返回值处理器;

    • selectHandler方法中循环遍历15个返回值处理器,返回一个匹配的我们返回值的返回值处理器;

    • 通过返回的返回值处理器调用其重写的handleReturnValue方法,来获取一个view;

    • 返回值处理器重写的handleReturnValue方法首先判断返回值是否为一个字符串,如果是一个字符串,那就会调用mavContainer.setViewName方法,放到这个容器中,这样我们的mavContainer容器中就有了Model和View。

  3. 将returnValue和Model封装成一个ModelAndView进行返回

    • 使用getModelAndView中的UpdateModel方法将webRequest和mavContainer传入,进行更新

    • 主要怎么更新,使用UpdateModel方法先获得Model中的数据,然后在遍历Model拿到每个key对应的值

  4. 如何将ModelAndView中Model值返给request域中

    • 返回完ModelAndView后,就会在执行processDispatcheResult方法,使用该方法将model中的数据存入到request域中

    • 具体怎么村,使用processDispatcheResult方法中调用render这个方法,这个方法用来处理模型数据和渲染视图的作用

    • 进入render这个方法,然后首先拿到view视图名,然后调用视图解析器进行解析视图

    • 在他通过view调用其重写的render,把model封装到一个Map集合中

    • 渲染合并输出模型数据,暴露model作为请求域属性,然后循环model将key和value存入到request域中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值