ViewResolver视图解析器简介说明
下文讲述ViewResolver视图解析器简介说明,如下所示:
这种视图解析器会把它曾经解析过的视图保存起来
然后每次要解析视图的时候先从缓存里面找
如果找到了对应的视图就直接返回
如果没有就创建一个新的视图对象
然后把它放到一个用于缓存的map中
接着再把新建的视图返回
使用这种视图缓存的方式可以把解析视图的性能问题降到最低
它继承了AbstractCachingViewResolver
使用拼接URL的方式来解析视图
它可以让我们通过prefix属性指定一个指定的前缀
通过suffix属性指定一个指定的后缀
然后把返回的逻辑视图名称加上指定的前缀和后缀就是指定的视图URL了
所以它也是支持视图缓存的
XmlViewResolver需要给定一个xml配置文件
该文件将使用和Spring的bean工厂配置文件一样的DTD定义
所以其实该文件就是用来定义视图的bean对象的
在该文件中定义的每一个视图的bean对象都给定一个名字
然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称的视图bean用于处理视图。
通过把返回的逻辑视图名称去匹配定义好的视图bean对象
URLBasedViewResolver支持的特性它都支持
在实际应用中InternalResourceViewResolver也是使用的最广泛的一个视图解析器
InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象
InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中
使用RequestDispatcher在服务器端把请求forword重定向到目标URL
都继承自AbstractCachingViewResolver
但是它缓存的不是视图
同XmlViewResolver一样
它也需要有一个配置文件来定义逻辑视图名称和真正的View对象的对应关系
不同的是ResourceBundleViewResolver的配置文件是一个属性文件
而且必须是放在classpath路径下面的
默认情况下这个配置文件是在classpath根目录下的views.properties文件
如果不使用默认值的话,则可以通过属性baseName或baseNames来指定。
FreeMarkerViewResolver会把Controller处理方法返回的逻辑视图解析为FreeMarkerView
如:
Controller中 return "test.htm"则对应view视图中的test.htm视图
常见的实现类有:
InternalResourceViewResolver,FreeMarkerViewResolver,XsltViewResolver这3个实现类。
这种视图类型的好处无需指定逻辑视图名同具体视图名称的映射
对应的ViewResolver将自动到指定位置匹配自己所管辖的那种视图模板,并构造具体的View实例
例:
如果你们的逻辑视图名称都想映射到ReportView时,那么这种多视图类型就可以完成此种操作
如:
ResourceBundleViewResolver、XmlViewResolver,BeanNameViewResolver这3个实现类。
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个实现类。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。