此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

视图分辨率

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

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

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

AbstractCachingViewResolverspring-doc.cadn.net.cn

的子类AbstractCachingViewResolver缓存它们解析的视图实例。 缓存提高了某些视图技术的性能。您可以关闭 缓存,方法是将cache属性设置为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.您可以指定视图 类,用于此解析器生成的所有视图,方法是使用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接口,该接口基于 请求文件名或Accept页眉。请参阅内容协商spring-doc.cadn.net.cn

BeanNameViewResolverspring-doc.cadn.net.cn

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

处理

您可以通过声明多个解析器 bean 来链接查看解析器,并在必要时通过 将order属性来指定排序。请记住,order 属性越高, 视图解析器在链中的位置越晚。spring-doc.cadn.net.cn

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

配置视图分辨率就像添加ViewResolver豆子到你的Spring 配置。MVC Config视图解析器提供了专用的配置 API,用于添加对 HTML 模板有用的无逻辑视图控制器 没有控制器逻辑的渲染。spring-doc.cadn.net.cn

重 定向

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

净效果与控制器返回RedirectView,但现在 控制器本身可以根据逻辑视图名称进行作。逻辑视图 名称(例如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),但如果您使用其他视图,它会很有帮助 技术,但仍希望强制资源的转发由 Servlet/JSP 引擎。请注意,您也可以链接多个视图解析器。spring-doc.cadn.net.cn

内容协商

ContentNegotiatingViewResolver不是解析视图本身,而是解析委托 到其他视图解析器,然后选择与所请求的表示类似的视图 由客户。表示形式可以从Accept标头或从 query 参数(例如"/path?format=pdf").spring-doc.cadn.net.cn

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

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