SpringMVC的内容协商视图解析学习笔记

  1. 视图解析其:ContentNegotiatingViewResolver
    a. 关联ViewResolver Bean列表
    b. 关联ContentNegotiationManager Bean
    c. 解析最佳匹配View
    
  2. 内容协商管理器:ContentNegotiationManager
    a. 有ContentNegotiationConfigurer配置
    b. 由ContentNegotiationManagerFactoryBean 创建
    c. 关联ContentNegotiationStrategy集合
    
  3. 内容协商策略:ContentNegotiationStrategy
    a. PathExtensionContentNegotiationStrategy
    b. ParameterContentNegotiationStrategy
    c. FixedContentNegotiationStrategy
    d. HeaderContentNegotiationStrategy
    e. ServletPathExtensionContentNegotiationStrategy
    
  4. ViewResolver Bean列表
    0 = {ContentNegotiatingViewResolver@5836} 
    1 = {InternalResourceViewResolver@5842} 
    2 = {BeanNameViewResolver@5843} 
    3 = {ViewResolverComposite@5844} 
    4 = {InternalResourceViewResolver@5845} 
    
  5. DispatcherServlet#doDispatch => processDispatchResult => render => resolveViewName然后调用
    ContentNegotiatingViewResolver#resolveViewName(viewName, locale)获取View对象
ContentNegotiatingViewResolver#resolveViewName获取View对象流程
  1. ContentNegotiatingViewResolver#getMediaTypes(HttpServletRequest request)获取MediaType集合
    1.1  ContentNegotiationManager#resolveMediaTypes从request中获取支持的MediaType集合,
         当有一个ContentNegotiationStrategy返回不为空,则直接return,存为acceptableMediaTypes集合,
         eg:application/xml
    1.2  ContentNegotiationManager#getProducibleMediaTypes从request中获取支持的MediaType集合,通常返回*/* 
    1.3  遍历1.1中的结果集与1.2中结果集如果匹配则保存并返回集合,eg:application/xml
    
  2. ContentNegotiatingViewResolver#getCandidateViews根据viewName和requestedMediaTypes获取备选View
    1.1 this.contentNegotiationManager.resolveFileExtensions(requestedMediaType)获取extension。eg:xml
    1.2 遍历viewResolvers通过viewResolver#resolveViewName((viewName)获取view对象,并添加到备选view集合
    1.3 遍历viewResolvers通过viewResolver#resolveViewName(viewName + '.' + extension)并添加到备选view集合
    
  3. ContentNegotiatingViewResolver#getBestView根据requestedMediaTypes筛选candidateViews
    1.1 遍历candidateViews通过candidateView#getContentType并转换为MediaType对象,判断是否与requestedMediaTypes匹配
    1.2 如果1.1 匹配则返回candidateView
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值