Spring MVC 源码阅读笔记

一、功能

视图解析器ViewResolver用于返回页面或者数据给前端请求。

二、接口及实现类

顶层接口: ViewResolver

    定义了最核心的 View resolverViewName方法, 根据视图名返回真实的视图对象

实现类:

    BeanNameViewResolver:  将controller中返回的逻辑视图名做为beanID去applicationContext中获取View对象, 如果没有找到会报错。
    ContentNegotiatingViewResolver: 
        本身不负责解析视图, 它根据请求content-type选择与之相匹配的视图解析器来完成实际的视图解析工作。
        属性:
            viewResolvers: 指定视图解析器列表, 如果没配置此属性, Spring会自动从ApplicationContext中查找ViewResolver类型的Bean
            defaultViews: 配置默认视图列表, 默认视图的作用是所有ViewResolver都没有找到合适视图时, 会从默认视图中查看是否有匹配的。
    AbstractCachingViewResolver:
        UrlBasedViewResolver:
            InternalResourceViewResolver:通过RequestDispatcher完成内部跳转, 主要用于在JSP和Servlet之间跳转

三、视图

1、两个特殊的视图:
RedirectView、ForwardView
RedirectView用于给客户端发送重定向响应(302), 如想从一个Controller跳转到加一个Controller, 可以return “redirect: xxx.action”, 客户收到响应后就会自动请求xxx.action这个RequestMapping, 间接实现了从一个Controller跳转到另一个Controller.
ForwardView, 基于RequestDispatch, 在服务端实现跳转, 同时将reqeust参数带入请求中, 这种跳转同样可以实现Controller -> Controller, 而且对客户端无感(不会改变客户端URL).

2、Controller中的方法无返回值时
这时Spring会用当前请求地址作为逻辑视图名调用众多视图解析器去解析视图。

四、Spring怎么决定用哪个视图解析器

  1. 如果配置的有多个视图解析器, Spring按照配order属性决定优先级, 1为优先级最高。
  2. 如果配置了ContentNegotiatingViewResolver视图解析器, 并且已经进入ContentNegotiatingViewResolver解析器, ContentNegotiatingViewResolver会查找内部配置的viewResolvers或者ApplicationContext中配置的其它视图解析器, 按请求类型和解析器响应类型, 选择合适的视图解析器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值