所有的MVC框架都为web应用提供定位views。Spring提供view解析器,不限定具体的view技术,将models渲染到浏览器。
有两个重要的接口ViewResolver和View。ViewResolver提供view名称与实际views之间的映射。使用ViewResolver接口解析views
在Spring Web MVC控制器中,所有处理方法都对应view逻辑名。或显式或隐式。Spring中的Views由逻辑view名定位,由view解析器解析。Spring自带了多个view解析器。
AbstractCachingViewResolver | |
XmlViewResolver | |
ResourceBundleViewResolver | |
UrlBasedViewResolver | 接单实现ViewResolver接口直接将view逻辑名解析为URL,无显式的映射定义。适用于逻辑名与view源文件名匹配。 |
InternalResourceViewResolver | |
VelocityViewResolver/FreeMarkerViewResolver | |
ContentNegotiatingViewResolver |
使用JSP作为视图解析技术,可以使用UrlBasedViewResolver。该解析器将视图名解析为URL。
当返回逻辑视图名test时,将请求解析为/WEB-INF/jsp/test.jsp。
当在web应用中使用不同的view激素时,可以使用ResourceBundleViewResolver:
ResourceBundleViewResolver检索有basename定义的ResourceBundle。对每个假定的view,使用属性[viewname].(class)作为view class、属性[viewname].url作为view url。
解析器链
Spring支持多个视图解析器。通过在application上下文中添加多个解析器,必要时设置order属性确定顺序。order属性越高,使用顺序越靠后。
如果一个具体的视图解析器不能解析出某个视图,Spring在上下文中查找其他的视图解析器。如果视图解析器存在,Spring继续直到视图被解析。如果不存在,Spring将抛出ServletException。