响应数据处理(向作用域放值)
ModelAndView的方式
结果
原码分析ModelAndView
ModelAndView类,就只有view和ModelMap
ModelMap继承LinkedHashMap<String, Object>
LinkedHashMap<String, Object>继承实现HashMap<K,V>,Map<K,V>
所以相当于一个Map集合
回到ModelAndView类,里面的三个方法都是返回Map集合
addObject()方法就是向里面的Map放一个键值对
开始debug
调用了DispatcherServlet类里面的方法,返回一个ModelAndView mv
进入processDispatchResult方法
进入render方法
通过视图解析器 解析得到一个View视图对象.
然后视图对象开始处理模型数据
mv.getModelInternal()得到Map集合
进入view.render
render()方法是View接口中定义的。 在 AbstractView类中进行了实现. 所有具体的视图类都使用AbstractView中实现的render方法.createMergedOutputModel
根据名知意,创建一个合并的模型数据
进入renderMergedOutputModel(合并输出模型)
进入exposeModelAsRequestAttributes(解析模型作为一个响应属性)
终于看到重点,这里遍历了Map集合,将集合里面的键值对设置成响应对象的属性
设置好后,跳出到renderMergedOutputModel的后面的方法
得到转发器然后转发
直接Map集合的方式
其实这种方式还是调用上面那个ModelAndView的方法
Model中向作用域放值
其实这种方式还是调用上面那个ModelAndView的方法