Sprnig中的视图以名字为标识,视图解析器通过名字来解析视图。Spring提供了多种视图解析器。我们将举例加以说明。
表 13.5. 视图解析器
| 描述 |
| 抽象视图解析器实现了对视图的缓存。在视图被投入使用之前,通常需要进行一些准备工作。从它继承的视图解析器将对要解析的视图进行缓存。 |
| XmlViewResolver实现 |
| ResourceBundleViewResolver实现 |
| UrlBasedViewResolver实现 |
| 作为 |
| 作为 |
举例来说,当使用JSP作为视图层技术时,就可以使用UrlBasedViewResolver
。这个视图解析器会将视图名解析成URL,并将请求传递给RequestDispatcher来显示视图。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
当返回的视图名为test
时,这个视图解析器将请求传递给RequestDispatcher
,RequestDispatcher
再将请求传递给/WEB-INF/jsp/test.jsp
。
当在一个web应用中混合使用不同的视图技术时,你可以使用ResourceBundleViewResolver
:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="views"/>
<property name="defaultParentView" value="parentView"/>
</bean>
ResourceBundleViewResolver
通过basename所指定的ResourceBundle
解析视图名。对每个待解析的视图,ResourceBundle里的[视图名].class
所对应的值就是实现该视图的类。同样,[视图名].url
所对应的值是该视图所对应的URL。从上面的例子里你也可以发现,你可以指定一个parent view,其它的视图都可以从parent view扩展。用这种方法,你可以声明一个默认的视图。
关于视图缓存的注意事项 --继承AbstractCachingViewResolver
的解析器可以缓存它曾经解析过的视图。当使用某些视图技术时,这可以大幅度的提升性能。你也可以关掉缓存功能,只要把cache
属性设成false
就可以了。而且,如果你需要在系统运行时动态地更新某些视图(比如,当一个Velocity模板被修改了),你可以调用removeFromCache(String viewName, Locale loc)
方法来达到目的。