Model和Map参数解析原理
Map
、Model
参数里面的数据会被放在request
请求域中RedirectAttributes
重定向携带数据ServletResponse
响应数据
Map
、Model
类型的参数,会使用ModelAndViewContainer
这个参数解析器,返回mavContainer.getModel()
,实际上返回的是BindingAwareModelMap
,它既是Model
也是Map
Map
、Model
类型的参数都是用同一个对象来处理参数的值
执行完目标方法之后,会得到返回值returnValue
,数据相当于Model
,返回的跳转页面的字符串相当于View
,都保存在ModelAndViewContainer
这个容器中
之后调用handleReturnValue()
方法来处理返回值
处理完返回值以后,会调用getModelAndView()
方法来获取并处理ModelAndViewContainer
容器中的数据
将mavContainer
里面的model
封装成ModelAndView
对象
如果model
是RedirectAttributes
重定向类型,就会把所有的属性全部放到请求的上下文中,然后返回ModelAndView
对象
DispatcherServlet
前端控制器彻底执行完目标方法之后,就会调用processDispatchResult()
方法处理派发结果
processDispatchResult()
方法会调用render()方法去渲染视图
在渲染视图过程中,会调用exposeModelAsRequestAttributes()
方法暴露模型作为请求域属性
exposeModelAsRequestAttributes()
方法会把model
中的所有数据遍历,挨个放到请求域中