-
接第1个问题点中的参数匹配对应的argumentresolvers(参数解析器)开始总结,循环遍历后得到model和Map的参数解析器进行参数解析
-
model的参数解析器:ModelMethodProcessor ;map的参数解析器:MapMethodProcessor ;这两个参数解析器分别通过判断是不是model.class类型和Map.class类型。
-
每一个参数解析器都有会重写resolveArgument方法来解析我们的参数,通过源码看出ModelMethodProcessor和MapMethodProcessor 最终都会调用一个mavContainer.getModel()方法,该方法返回的是一个ModelMap对象new了一个BindingAwareModelMap
-
-
通过在Handler中的15个返回值处理器调用handleReturnView返回一个view
-
handleReturnView方法中调用selectHandler获得一个返回值处理器;
-
selectHandler方法中循环遍历15个返回值处理器,返回一个匹配的我们返回值的返回值处理器;
-
通过返回的返回值处理器调用其重写的handleReturnValue方法,来获取一个view;
-
返回值处理器重写的handleReturnValue方法首先判断返回值是否为一个字符串,如果是一个字符串,那就会调用mavContainer.setViewName方法,放到这个容器中,这样我们的mavContainer容器中就有了Model和View。
-
-
将returnValue和Model封装成一个ModelAndView进行返回
-
使用getModelAndView中的UpdateModel方法将webRequest和mavContainer传入,进行更新
-
主要怎么更新,使用UpdateModel方法先获得Model中的数据,然后在遍历Model拿到每个key对应的值
-
-
如何将ModelAndView中Model值返给request域中
-
返回完ModelAndView后,就会在执行processDispatcheResult方法,使用该方法将model中的数据存入到request域中
-
具体怎么村,使用processDispatcheResult方法中调用render这个方法,这个方法用来处理模型数据和渲染视图的作用
-
进入render这个方法,然后首先拿到view视图名,然后调用视图解析器进行解析视图
-
在他通过view调用其重写的render,把model封装到一个Map集合中
-
渲染合并输出模型数据,暴露model作为请求域属性,然后循环model将key和value存入到request域中
-
*2、请求处理底层原理-SpringBoot2一次请求到响应的具体步骤(以model和Map举例)
最新推荐文章于 2024-03-07 08:21:26 发布