ModelAndView底层处理过程:

ModelAndView底层处理过程:
[1]. 在 DispatcherServlet 中 945 行 , 开始调用请求处理方法.
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
[2]. 执行请求处理方法, 方法执行完成以后,返回一个ModelAndView对象 . 最终返回到 DispatcherServlet 中的 945 行.
[3]. 在DispatcherServlet的959 行, 开始处理Dispatch的结果. 实际就是准备开始处理ModelAndView对象.
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
[4]. 在DispatcherServlet的 1012行, 真正开始对ModelAndView对象进行处理.
render(mv, request, response);
[5]. 在DispatcherServlet的1204行, 通过解析视图名字,得到视图对象.
view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
当前得到的视图对象为: 在这里插入图片描述
[6]. 在DispatcherServlet的1225行, 视图对象开始处理模型数据.
view.render(mv.getModelInternal(), request, response);
注意: render()方法是View接口中的抽象方法, 该抽象方法在AbstractView中做了统一的实现, 任何一个视图对象将来都调用AbstractView中的render方法.
[7]. 在AbstractView中的266行, 具体处理模型数据.
renderMergedOutputModel(mergedModel, request, response);
注意: renderMergedOutputModel 是AbstractView中的抽象方法, 该方法在每个具体的视图类中做了不同的实现。
因为当前解析得到的视图对象是InternalResourceView, 因此会调用到InternalResourceView的renderMergedOutputModel 方法。
[8]. 在IntrenalResourceView中的 180行, 将模型数据存储到Request域对象中.
exposeModelAsRequestAttributes(model, requestToExpose);
在这里插入图片描述
[9]. 在IntrenalResourceView中的 189行, 获取转发器
RequestDispatcher rd = getRequestDispatcher(requestToExpose, dispatcherPath);
[10].在IntrenalResourceView中的 209行,开始转发
rd.forward(requestToExpose, response);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值