ViewResolver视图解析器简介说明

java-教程王 SpringMVC 发布时间:2022-01-01 09:07:53 阅读数:19351 1
下文讲述ViewResolver视图解析器简介说明,如下所示:

ViewResolver视图解析器说明

ViewResolver是一个接口
ViewResolver的功能:
   根据Controller返回的ModelAndView中的逻辑视图名
   为DispatcherServlet返回一个可用的View实例
   SpringMVC中用于把View对象呈现给客户端的是View对象本身
   而ViewResolver只是把逻辑视图名称解析为对象的View对象

ViewResolver源码分析

public interface ViewResolver {
    View resolveViewName(String viewName, Locale locale) throws Exception;
}

接口实现类:根据resolveViewName()方法中以参数形式传入的逻辑视图名(viewName)和当前Locale的值
返回相应的View实例

ViewResolver实现类简介

实现类1:AbstractCachingViewResolver
AbstractCachingViewResolver是一个抽象类
这种视图解析器会把它曾经解析过的视图保存起来
然后每次要解析视图的时候先从缓存里面找
如果找到了对应的视图就直接返回
如果没有就创建一个新的视图对象
然后把它放到一个用于缓存的map中
接着再把新建的视图返回
使用这种视图缓存的方式可以把解析视图的性能问题降到最低
实现类2:UrlBasedViewResolver
UrlBasedViewResolver是对ViewResolver的一种简单实现
它继承了AbstractCachingViewResolver
使用拼接URL的方式来解析视图
它可以让我们通过prefix属性指定一个指定的前缀
通过suffix属性指定一个指定的后缀
然后把返回的逻辑视图名称加上指定的前缀和后缀就是指定的视图URL了
实现类3:XmlViewResolver
XmlViewResolver继承自AbstractCachingViewResolver抽象类
所以它也是支持视图缓存的
XmlViewResolver需要给定一个xml配置文件
该文件将使用和Spring的bean工厂配置文件一样的DTD定义
所以其实该文件就是用来定义视图的bean对象的
在该文件中定义的每一个视图的bean对象都给定一个名字
然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称的视图bean用于处理视图。
实现类4:BeanNameViewResolver
BeanNameViewResolver视图解析器跟XmlViewResolver相似
通过把返回的逻辑视图名称去匹配定义好的视图bean对象
实现类5:InternalResourceViewResolver
InternalResourceViewResolver是URLBasedViewResolver的子类
URLBasedViewResolver支持的特性它都支持
在实际应用中InternalResourceViewResolver也是使用的最广泛的一个视图解析器
InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象
InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中
使用RequestDispatcher在服务器端把请求forword重定向到目标URL
实现类6:ResourceBundleViewResolver
ResourceBundleViewResolver同XmlViewResolver一样
都继承自AbstractCachingViewResolver
但是它缓存的不是视图
同XmlViewResolver一样
它也需要有一个配置文件来定义逻辑视图名称和真正的View对象的对应关系
不同的是ResourceBundleViewResolver的配置文件是一个属性文件
而且必须是放在classpath路径下面的
默认情况下这个配置文件是在classpath根目录下的views.properties文件
如果不使用默认值的话,则可以通过属性baseName或baseNames来指定。

FreeMarkerViewResolver

FreeMarkerViewResolver是UrlBasedViewResolver的子类
FreeMarkerViewResolver会把Controller处理方法返回的逻辑视图解析为FreeMarkerView

ViewResolver分类

面向单一视图类型的ViewResolver
单一视图的映射,通常逻辑视图名同具体的view是一一对应的关系
如:
Controller中 return "test.htm"则对应view视图中的test.htm视图
常见的实现类有:
InternalResourceViewResolver,FreeMarkerViewResolver,XsltViewResolver这3个实现类。

面向多视图类型的ViewResolver

面向一种类型的视图,可以解析某一类型的视图,如:报表类型视图
这种视图类型的好处无需指定逻辑视图名同具体视图名称的映射
对应的ViewResolver将自动到指定位置匹配自己所管辖的那种视图模板,并构造具体的View实例
例:
如果你们的逻辑视图名称都想映射到ReportView时,那么这种多视图类型就可以完成此种操作
如:
ResourceBundleViewResolver、XmlViewResolver,BeanNameViewResolver这3个实现类。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringMVC/202201/2111.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者