springmvc视图解析器(7)
图 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 时,一般需要配置三个部分:
- 注册所支持的媒体类型,也就是文件后缀名及其对应的文件内容类型。
- 视图解析器,也就是 ContentNegotiatingViewResolver 在查找视图时,实际所代理使用的视图解析器。
- 默认视图,当视图解析器没有查找到合适的视图时,将使用该默认视图。