Spring web MVC 框架之 视图解析器(ViewResolver)

来源:互联网 发布:屏幕右下角激活windows 编辑:程序博客网 时间:2024/05/24 02:14

我们知道,ViewResolver即视图解析器,当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个使用基于XML文件中的视图bean的解析器来解析“逻辑视图名称”

看如如下控制器代码:
@RequestMapping("/testViewResolver")
public ModelAndView testViewResolverl(){
logger.info("");
return new ModelAndView("ViewResolver");
}

“逻辑视图名称”即是ViewResolver,当我们返回视图时,DispacherServlet进行加载默认的InternalResourceViewResolver进行解析,

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF//views/"/>
<property name="suffix" value=".jsp"/>

我们经常使用的viewResolver有以下四种这里写图片描述

在说一下使用BeanNameViewResolver解析器:

<bean class=”org.springframework.web.servlet.view.BeanNameViewResolver”> <property name="order" value="1"></property> </bean> <bean id="ViewResolver" class="com.unmi.controller.ViewResolver"/> 

返回“ViewResolver”时候,就会解析class包名下的javabean文件。XmlViewResolver 和 ResoureBundlerViewResolver 就不说了,原理是一样,区别只在它们从哪儿获得视图实现,看情况而定。

还有就是当我们使用多个解析器进行解析时候,

<!-- InternalResourceViewResolver解析 --><bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">   <property name="prefix" value="/jsp/"/>   <property name="suffix" value=".jsp"/> </bean> <!-- BeanBameResourceViewResolver解析 --> <bean class=”org.springframework.web.servlet.view.BeanNameViewResolver”>   <property name="order" value="3"></property> </bean> <bean id="ViewResolver" class="com.unmi.controller.ViewResolver"/>  <!-- XmlResourceViewResolver解析 --> <bean class=”org.springframework.web.servlet.view.XmlViewResolver”>   <property name="order" value="1"></property>   <property name="location" value="WEB-INF/views.xml"></property> </bean><!-- ResourceBundleViewResolver解析 --><bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">     <property name="basename"><value>views</value></property>    <property name="location" value="WEB-INF/views.properties"></property>    <property name="order" value="2"></property>    </bean> 

这里有一个问题,这么多的解析器,谁先进行解析呢?

在代码中加<property name="order" value="1"></property> ,因为DispatcherServlet会加载所有的viewResolver到一个list中,并按照优先级高到低进行解析。注意*order中的值越小,优先级越高* 同时也说明了为什么InternalResourceViewResolver是默认(order值为max)的了。
0 0