SpringMVC中可以使用多个HandlerMapping

在基于Spring MVC的Web应用程序中,我们可以为DispatcherServlet提供多个Handler- Mapping供其使用。DispatcherServlet在选用HandlerMapping的过程中,将根据我们所指定的一系列HandlerMapping的优先级进行排序,然后优先使用优先级在前的HandlerMapping。如果当前的HandlerMapping能够返回可用的Handler,DispatcherServlet则使用当前返回的Handler进行Web请求的处理,而不再继续询问其他的HandlerMapping。否则,DispatcherServlet将继续按照各个HandlerMapping的优先级进行询问,直到获取一个可用的Handler为止。

HandlerMapping的优先级规定遵循Spring框架内一贯的Ordered接口所规定的语义。Spring MVC中可用的HandlerMapping实现全都实现了Ordered接口。假设我们优先使用SimpleUrl- HandlerMapping进行Handler的映射管理,其次使用BeanNameUrlHandlerMapping,那么就可以在DispatcherServlet特定的WebApplicationContext中增加如代码清单24-3所示的配置内容。

代码清单 HandlerMapping指定优先级配置代码示例
<bean id="handlerMapping" class="org.
springframework.Web.servlet.handler.?   
SimpleUrlHandlerMapping">   
    <property name="order" value="1"/>   
    <property name="mappings">   
        <value>   
                ...   
        </value>   
    </property>   
</bean>   
  
<bean id="defaultHandlerMapping" ?   
class="org.springframework.Web.servlet.
handler.BeanNameUrlHandlerMapping">   
</bean>  


如果不为HandlerMapping明确指定order,那么默认值为Integer.MAX_VALUE,对应最低优先级。所以,拥有order值为1的SimpleUrlHandlerMapping较之BeanNameUrlHandlerMapping优先被调用。

猜你喜欢

转载自wxfstwxf.iteye.com/blog/1083350
今日推荐