View 分辨率

Spring MVC 定义了ViewResolverView允许您渲染 模型,而无需将您绑定到特定的视图技术。ViewResolver提供视图名称和实际视图之间的映射。View解决准备工作 的数据,然后再移交给特定的视图技术。spring-doc.cadn.net.cn

下表提供了有关ViewResolver等级制度:spring-doc.cadn.net.cn

表 1.ViewResolver 实现
视图解析器 描述

AbstractCachingViewResolverspring-doc.cadn.net.cn

的子类AbstractCachingViewResolvercache 视图实例。 缓存可以提高某些视图技术的性能。您可以关闭 cache 通过设置cacheproperty 设置为false.此外,如果您必须刷新 运行时的某个视图(例如,当修改 FreeMarker 模板时), 您可以使用removeFromCache(String viewName, Locale loc)方法。spring-doc.cadn.net.cn

UrlBasedViewResolverspring-doc.cadn.net.cn

简单实现ViewResolver影响直接 将逻辑视图名称解析为没有显式映射定义的 URL。 如果您的逻辑名称与视图资源的名称匹配,则此选项是合适的 以简单的方式,无需任意映射。spring-doc.cadn.net.cn

InternalResourceViewResolverspring-doc.cadn.net.cn

方便的子类UrlBasedViewResolver那个辅助InternalResourceView(在 effect、Servlet 和 JSP)和子类(如JstlView.您可以指定视图 class 为此解析程序使用setViewClass(..). 请参阅UrlBasedViewResolverjavadoc 了解详细信息。spring-doc.cadn.net.cn

FreeMarkerViewResolverspring-doc.cadn.net.cn

方便的子类UrlBasedViewResolver那个辅助FreeMarkerView和 它们的自定义子类。spring-doc.cadn.net.cn

ContentNegotiatingViewResolverspring-doc.cadn.net.cn

实现ViewResolver接口,该接口根据 request file name 或Accept页眉。请参阅 内容协商spring-doc.cadn.net.cn

BeanNameViewResolverspring-doc.cadn.net.cn

实现ViewResolver接口将视图名称解释为 Bean 名称。这是一个非常灵活的变体,它 允许根据不同的视图名称混合和匹配不同的视图类型。 每个这样的View可以定义为 bean,例如,在 XML 或配置类中。spring-doc.cadn.net.cn

处理

您可以通过声明多个解析器 Bean 来链接视图解析器,如有必要,还可以通过 设置order属性来指定排序。请记住,order 属性越高, View Resolver 在链中的位置越晚。spring-doc.cadn.net.cn

一个ViewResolver指定它可以返回 null,以指示 找不到视图。但是,对于 JSP 和InternalResourceViewResolver, 确定 JSP 是否存在的唯一方法是通过RequestDispatcher.因此,您必须始终配置InternalResourceViewResolver在 View Resolver 的总体顺序中排在最后。spring-doc.cadn.net.cn

配置视图分辨率就像添加ViewResolverbeans 到你的 Spring 配置。MVC Config视图解析器和添加无逻辑视图控制器提供了一个专用的配置 API,这对 HTML 模板很有用 不使用控制器逻辑的渲染。spring-doc.cadn.net.cn

重 定向

特别的redirect:prefix 允许您执行重定向。这UrlBasedViewResolver(及其子类)将此视为一条指令, redirect 是必需的。视图名称的其余部分是重定向 URL。spring-doc.cadn.net.cn

实际效果与控制器返回RedirectView,但现在 控制器本身可以根据 logical view name 进行作。逻辑视图 name(例如redirect:/myapp/some/resource) 相对于当前 Servlet 上下文中,而redirect:https://myhost.com/some/arbitrary/path重定向到绝对 URL。spring-doc.cadn.net.cn

转发

您还可以使用特殊的forward:前缀 (前缀) 表示视图名称 最终由UrlBasedViewResolver和子类。这将创建一个InternalResourceView,它会执行RequestDispatcher.forward(). 因此,此前缀对InternalResourceViewResolverInternalResourceView(对于 JSP),但如果您使用其他视图,则可能会有所帮助 技术,但仍希望强制将资源的 forward 由 Servlet/JSP 引擎。请注意,您也可以链接多个视图解析器。spring-doc.cadn.net.cn

内容协商

ContentNegotiatingViewResolver不解析视图本身,而是解析 delegates 添加到其他视图解析程序,并选择类似于所请求的表示的视图 由客户。表示可以从Accept标头或从 query 参数(例如"/path?format=pdf").spring-doc.cadn.net.cn

ContentNegotiatingViewResolver选择适当的View处理请求 通过将请求媒体类型与媒体类型(也称为Content-Type) 由View与其每个ViewResolvers.这 第一View在列表中,具有兼容的Content-Type返回表示形式 到客户端。如果ViewResolver链 通过DefaultViewsproperty 的这 后一个选项适用于单例Views,这可以呈现适当的 表示当前资源,而不考虑逻辑视图名称。这Acceptheader 可以包含通配符(例如text/*),在这种情况下,会触发View谁的Content-Typetext/xml是兼容的匹配项。spring-doc.cadn.net.cn

有关配置详细信息,请参阅 MVC Config 下的 View Resolversspring-doc.cadn.net.cn