ViewResolver视图解析器简介说明

转自:

ViewResolver视图解析器简介说明

下文讲述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个实现类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值