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

我们知道,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有以下四种Spring web MVC 框架之 视图解析器(ViewResolver)_第1张图片

在说一下使用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)的了。

你可能感兴趣的:(spring,Web,xml,mvc,框架)