springmvc:View和ViewResolver解析

springmvc由HandlerAdapter执行具体的handler后,返回的是ModelAndView对象,如何映射到具体的视图,生成页面返回到浏览器,就需要ViewResolver和View来操作了。
 
直接到DispatcherServlet里看源码:



这里可以看到ViewResolver会对viewName进行解析,得到View对象。

从类成员变量this.viewResolvers里循环解析viewName,得到匹配的View对象。
 
this.viewResolvers的赋值在DispatcherServlet的初始化时进行:

这里同样对viewResolver进行了排序,根据order属性。当有多个viewResovler可以对viewName进行解析时,会匹配order值较小的一个。
 
返回到DispatcherServlet中继续往下看:

得到View对象后,调用view.render()方法,对视图进行渲染,生成页面返回到客户端(浏览器)。
继续解析view.render()方法:


可以看到render()里最终是获取到servlet的RequestDispatcher,根据解析的视图进行rd.forward()。这里分析的是常用的InternalResourceView。不同的View类型render处理是不一样的。
 
再来看一个MappingJackson2JsonView:

可以看到,处理json的view会将model的数据转化成json,使用response的outputStream进行write(),输出到页面。
 
View和ViewResovler对视图渲染处理的基本流程就是这样。
后续会对DispatcherServlet的处理流程进行总结,以及对不同的HandlerMapping、HandlerAdapter、ViewResolver、View进行更详细的解析。
 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值