5.Resolving views

解析视图

简介

所有用于Web应用程序的MVC框架都提供了一种处理视图的方法。Spring 提供了视图解析器(View Resolver),使您可以在浏览器中渲染模型,而无需绑定到特定的视图技术。Spring 内置支持使用 JSP、Velocity 模板和 XSLT 视图等。例如,有关如何集成和使用多种不同的视图技术,请参阅第23章“视图技术”。

在 Spring 处理视图的方式中,两个重要的接口是 ViewResolverView

  • ViewResolver:提供视图名称与实际视图之间的映射。
  • View:处理请求的准备工作,并将请求交给某种视图技术。

Resolving views with the ViewResolver interface

使用 ViewResolver 接口解析视图

正如在“实现控制器”一节中讨论的那样,Spring Web MVC 控制器中的所有处理方法都必须解析为逻辑视图名称,可以是显式的(例如,返回一个字符串、视图或 ModelAndView)或隐式的(基于约定)。在 Spring 中,视图通过逻辑视图名称来处理,并由视图解析器解析。Spring 提供了相当多的视图解析器。下表列出了大部分视图解析器,并附带了一些示例。

表 22.3 视图解析器

ViewResolver 描述
AbstractCachingViewResolver 抽象视图解析器,缓存视图。通常在视图使用前需要准备,扩展此视图解析器可提供缓存功能。
XmlViewResolver 接受一个用 XML 编写的配置文件的 ViewResolver 实现,配置文件的 DTD 与 Spring 的 XML bean 工厂相同。默认配置文件为 /WEB-INF/views.xml。
ResourceBundleViewResolver 使用 ResourceBundle 中的 bean 定义的 ViewResolver 实现,通过基础名指定的 bundle 通常在类路径下定义。默认文件名为 views.properties。
UrlBasedViewResolver 简单实现的 ViewResolver 接口,将逻辑视图名称直接解析为 URL,无需显式的映射定义。适用于逻辑名称与视图资源名称简单对应的情况。
InternalResourceViewResolver UrlBasedViewResolver 的便捷子类,支持 InternalResourceView(实际上是 Servlets 和 JSP)及其子类如 JstlView 和 TilesView。
VelocityViewResolver / FreeMarkerViewResolver UrlBasedViewResolver 的便捷子类,分别支持 VelocityView(实际上是 Velocity 模板)或 FreeMarkerView 及其自定义子类。
ContentNegotiatingViewResolver 根据请求文件名或 Accept 头解析视图的 ViewResolver 实现。参见第22.5.4节“ContentNegotiatingViewResolver”。

示例

以 JSP 作为视图技术为例,可以使用 UrlBasedViewResolver。此视图解析器将视图名称翻译为 URL,并将请求交给 RequestDispatcher 来渲染视图。

<bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

当返回 test 作为逻辑视图名称时,此视图解析器会将请求转发到 RequestDispatcher,它将请求发送到 /WEB-INF/jsp/test.jsp

组合不同的视图技术

在 Web 应用程序中组合不同的视图技术时,可以使用 ResourceBundleViewResolver

<bean id="viewResolver"
        class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值