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