1.几种常见的ViewResolver视图解析器在Spring MVC 4控制器中,所有的处理方法必须返回一个逻辑视图名称,无论是显式的(返回String,View或ModelAndView)还是隐式的。Spring中的视图由视图解析器处理这个逻辑视图名称,Spring有以下几种视图解析器:
AbstractCachingViewResolver:用来缓存视图的抽象视图解析器。通常情况下,视图在使用前就准备好了。继承改解析器就能够使用视图缓存。
XmlViewResolver :XML视图解析器。它实现了ViewResolver接口,接受相同DTD定义的XML配置文件作为Spring的XML bean工厂。
ResourceBundleViewResolver:它使用了ResourceBundle定义下的bean,实现了ViewResolver接口,指定了绑定包的名称。通常情况下,配置文件会定义在classpath下的properties文件中,默认的文件名字是views.properties。
UrlBasedViewResolver:它简单实现了ViewResolver接口,它不用显式定义,直接影响逻辑视图到URL的映射。它让你不用任何映射就能通过逻辑视图名称访问资源。
InternalResourceViewResolver:国际化视图解析器。
VelocityViewResolver /FreeMarkerViewResolver:Velocity或FreeMarker视图解析器。
ContentNegotiatingViewResolver:内容谈判视图解析器
在JSP视图技术中,Spring MVC经常会使用 UrlBasedViewResolver视图解析器,该解析器会将视图名称翻译成URL并通过RequestDispatcher处理请求后渲染视图。
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/></bean>
假如我们配置了如上所示的URL视图解析器,我们返回了一个叫“favmvc”的视图名称,视图解析器就会将请求转发到RequestDispatcher,然后跳转到/WEB-INF/views/favmvc.jsp页面。
假如我们想要在应用中使用不同的视图技术,我们就应该使用 ResourceBundleViewResolver。
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views"/> <property name="defaultParentView" value="parentView"/></bean>
ResourceBundleViewResolver对于每个要处理的视图,都会检查 ResourceBundle中basename的唯一性,它使用 [viewname].(class)作为视图类,[viewname].url作为视图的url。