springmvc视图解析器(7)

图 1.Spring MVC 处理流程

图 1.Spring MVC 处理流程

开发复合视图解析器

由于本例需要支持 SWF 及自定义后缀名的文件,所以我们期望能够根据不同请求的后缀名来调用不同的视图解析器。实际上,Spring 已经提供了类似的视图解析器-ContentNegotiatingViewResolver,它可以根据请求的文件后缀名或请求的 Accept 头来查找视图。ContentNegotiatingViewResolver 本身并不负责查找视图,它只是将视图查找工作代理给所注册的视图解析器,清单 3 给出了 ContentNegotiatingViewResolver 的配置文件片段。

清单 3.ContentNegotiatingViewResolver
 <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
  <property name="mediaTypes"> 
    <map> 
      <entry key="atom" value="application/atom+xml"/> 
      <entry key="html" value="text/html"/> 
      <entry key="json" value="application/json"/> 
    </map> 
  </property> 
  <property name="viewResolvers"> 
    <list> 
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> 
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="prefix" value="/WEB-INF/jsp/"/> 
        <property name="suffix" value=".jsp"/> 
      </bean> 
    </list> 
  </property> 
  <property name="defaultViews"> 
    <list> 
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
    </list> 
  </property> 
 </bean>

从清单 3 可以发现,在使用 ContentNegotiatingViewResolver 时,一般需要配置三个部分:

  1. 注册所支持的媒体类型,也就是文件后缀名及其对应的文件内容类型。
  2. 视图解析器,也就是 ContentNegotiatingViewResolver 在查找视图时,实际所代理使用的视图解析器。
  3. 默认视图,当视图解析器没有查找到合适的视图时,将使用该默认视图。
posted @ 2016-08-16 10:48  随风而逝,只是飘零  阅读(148)  评论(0编辑  收藏  举报