此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
View 分辨率
Spring MVC 定义了ViewResolver
和View
允许您渲染
模型,而无需将您绑定到特定的视图技术。ViewResolver
提供视图名称和实际视图之间的映射。View
解决准备工作
的数据,然后再移交给特定的视图技术。
下表提供了有关ViewResolver
等级制度:
视图解析器 | 描述 |
---|---|
|
的子类 |
|
简单实现 |
|
方便的子类 |
|
方便的子类 |
|
实现 |
|
实现 |
处理
您可以通过声明多个解析器 Bean 来链接视图解析器,如有必要,还可以通过
设置order
属性来指定排序。请记住,order 属性越高,
View Resolver 在链中的位置越晚。
一个ViewResolver
指定它可以返回 null,以指示
找不到视图。但是,对于 JSP 和InternalResourceViewResolver
,
确定 JSP 是否存在的唯一方法是通过RequestDispatcher
.因此,您必须始终配置InternalResourceViewResolver
在 View Resolver 的总体顺序中排在最后。
配置视图分辨率就像添加ViewResolver
beans 到你的 Spring
配置。MVC Config 为视图解析器和添加无逻辑视图控制器提供了一个专用的配置 API,这对 HTML 模板很有用
不使用控制器逻辑的渲染。
重 定向
特别的redirect:
prefix 允许您执行重定向。这UrlBasedViewResolver
(及其子类)将此视为一条指令,
redirect 是必需的。视图名称的其余部分是重定向 URL。
实际效果与控制器返回RedirectView
,但现在
控制器本身可以根据 logical view name 进行作。逻辑视图
name(例如redirect:/myapp/some/resource
) 相对于当前
Servlet 上下文中,而redirect:https://myhost.com/some/arbitrary/path
重定向到绝对 URL。
转发
您还可以使用特殊的forward:
前缀 (前缀) 表示视图名称
最终由UrlBasedViewResolver
和子类。这将创建一个InternalResourceView
,它会执行RequestDispatcher.forward()
.
因此,此前缀对InternalResourceViewResolver
和InternalResourceView
(对于 JSP),但如果您使用其他视图,则可能会有所帮助
技术,但仍希望强制将资源的 forward 由
Servlet/JSP 引擎。请注意,您也可以链接多个视图解析器。
内容协商
ContentNegotiatingViewResolver
不解析视图本身,而是解析 delegates
添加到其他视图解析程序,并选择类似于所请求的表示的视图
由客户。表示可以从Accept
标头或从
query 参数(例如"/path?format=pdf"
).
这ContentNegotiatingViewResolver
选择适当的View
处理请求
通过将请求媒体类型与媒体类型(也称为Content-Type
) 由View
与其每个ViewResolvers
.这
第一View
在列表中,具有兼容的Content-Type
返回表示形式
到客户端。如果ViewResolver
链
通过DefaultViews
property 的这
后一个选项适用于单例Views
,这可以呈现适当的
表示当前资源,而不考虑逻辑视图名称。这Accept
header 可以包含通配符(例如text/*
),在这种情况下,会触发View
谁的Content-Type
是text/xml
是兼容的匹配项。
有关配置详细信息,请参阅 MVC Config 下的 View Resolvers。