在SpringMVC中能够同时定义多个ViewResolver视图解析器,而后它们会组成一个ViewResolver链。当Controller处理器方法返回一个逻辑视图名称后,ViewResolver链将根据其中ViewResolver的优先级来进行处理。全部的ViewResolver都实现了Ordered接口,在Spring中实现了这个接口的类都是能够排序的。在ViewResolver中是经过order属性来指定顺序的,默认都是最大值。因此咱们能够经过指定ViewResolver的order属性来实现ViewResolver的优先级,order属性是Integer类型,order越小,对应的ViewResolver将有越高的解析视图的权利,因此第一个进行解析的将是ViewResolver链中order值最小的那个。当一个ViewResolver在进行视图解析后返回的View对象是null的话就表示该ViewResolver不能解析该视图,这个时候若是还存在其余order值比它大的ViewResolver就会调用剩余的ViewResolver中的order值最小的那个来解析该视图,依此类推。当ViewResolver在进行视图解析后返回的是一个非空的View对象的时候,就表示该ViewResolver可以解析该视图,那么视图解析这一步就完成了,后续的ViewResolver将不会再用来解析该视图。当定义的全部ViewResolver都不能解析该视图的时候,Spring就会抛出一个异常。web
基于Spring支持的这种ViewResolver链模式,咱们就能够在SpringMVC应用中同时定义多个ViewResolver,给定不一样的order值,这样咱们就能够对特定的视图特定处理,以此来支持同一应用中有多种视图类型。注意:像InternalResourceViewResolver这种能解析全部的视图,即永远能返回一个非空View对象的ViewResolver必定要把它放在ViewResolver链的最后面。spring
<bean class="org.springframework.web.servlet.view.XmlViewResolver"> <property name="location" value="/WEB-INF/views.xml"/> <property name="order" value="1"/> </bean> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0" /> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="prefix" value="/WEB-INF/" /> <property name="suffix" value=".jsp" /> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/> </bean>
注:p:order="0"就至关于<property name="order" value="0" />jsp