spring视图解析器和视图的理解

在视图解析器的继承关系中,从AbstractCachingViewResolver开发分成不同形式的解析器,ResourceBundleViewResolver,
UrlBasedViewResolver,XmlViewResolver。
[img]http://dl.iteye.com/upload/attachment/355725/7273bf2e-7111-30d7-97e0-140927ba3b53-thumb.bmp[/img]

今天看了下spring有关的源码,记录下关于ResourceBundleViewResolver,UrlBasedViewResolver和
解析器之间的不同。

如果用ResourceBundleViewResolver解析器,我们会定义一个或多个与它相关联的文件,默认为views.properties
文件,通过不同名字的文件可以进行国际化的配置。如果spring配置文件中定义了ResourceBundleViewResolver解析器,当controller返回
ModelAndView的时候,系统会根据当前所访问的地区把与ResourceBundleViewResolver相对应文件的内容映射成bean,与spring配置
文件中定义的其它bean一起放在spring的缓存map中,(key中.class之前的部分做为beanid,value作为map的值),所以如果我们把
views.properties中定义的内容放入spring的配置文件中,一样可以。
然后系统把ModelAndView中返回的试图名作为key从map中查询定义的view类,如果查询出,则根据views.properties中与view相对应的url查找出view模版。
如果查询不到,则继续用在spring中定义的其它视图解析器查询视图,这是它与UrlBasedViewResolver解析器最大的不同点,UrlBasedViewResolver,
下的子解析器如果在他们的缓存中查询不到视图,则会判断ModelAndView中提供的viewname与它的属性viewNames中的字符创是否相对应,如果对应则新生成一个view。
放入缓存中,如果不存在对应则通过spring配置文件中定义的其它视图解析器查询视图

在UrlBasedViewResolver视图解析器中定义了(viewNames可以在spring配置文件中配置)
prefix,suffix和viewNames三个字段,prefix和suffix是字符串类型,它们会与ModelAndView中返回的viewname一起组成请求视图(.jsp, .vm 等)的模版路径
(prefix + viewname + suffix),系统会根据这个路径查找到视图模版,将模版与model一起返回给浏览器(这里还有一些其它的工作,excel视图是需要自己继承的,等)。
而viewNames字段是一个字符串数组,它里面的字符串可以写成正则表达式的方式。viewNames是字符串数组

ResourceBundleViewResolver配置文件中定义的url与UrlBasedViewResolver中prefix + viewname + suffix意思是一样的。viewname 为ModelAndView中的视图名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章