Spring 映射

在配置文件定义URL的映射方式(HandlerMapping)。Spring提供了几种常用的HandlerMapping。 


1.使用SimpleUrlHandlerMapping 
SimpleUrlHandlerMapping提供了最简单的URL映射,通过Properties将URL和Controller对应起来,配置示例如下。 

Xml代码   收藏代码
  1. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet. handler.SimpleUrlHandlerMapping">  
  2.   
  3.  <!-- 为映射处理器引入拦截器bean        <property name="interceptors">    
  4.                 <list>    
  5.                     <ref bean="workTimeInterceptor" />    
  6.                 </list>    
  7.             </property>    
  8.  -->    
  9.     <property name="mappings">  
  10.         <props>  
  11.             <prop key="/a.html">controllerA</prop>  
  12.             <prop key="/b.html">controllerB</prop>  
  13.         </props>  
  14.     </property>  
  15. </bean>  
这种方式和Struts的配置类似。当用户请求一个URL时,Spring就在SimpleUrl HandlerMapping注入的Properties中查找对应的Controller。 


2.使用BeanNameUrlHandlerMapping 

BeanNameUrlHandlerMapping的实现更为简单,每个Controller的URL与其name属性对应,因此,只需要对每个Controller以URL作为name,就可以实现URL映射。配置示例如下。 

Xml代码   收藏代码
  1. <bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet. handler.BeanNameURLHandlerMapping" />  
  2.   
  3. <bean name="/a.html" class="example.chapter7.ControllerA" />  
  4. <bean name="/a.html" class="example.chapter7.ControllerB" />  



(今天写demo 的时候就是少了一句BeanNameUrlHandlerMapping,特此纪念) 

之所以用Bean的name作为URL而不是id,是因为XML规范不允许在id标识中使用特殊字符“/”。当用户请求一个URL时,Spring将直接查找name为URL的Controller。 

使用SimpleUrlHandlerMapping的麻烦之处在于,添加或删除Controller时必须要对SimpleUrlHandlerMapping做相应的修改,而BeanNameUrlHandlerMapping则无需手工编写映射,只需要在每个Controller中仔细定义name属性。如果使用XDoclet自动生成配置文件,则可以将name在Controller的注释中定义,维护起来更加方便。因此,我们推荐首先考虑使用BeanNameUrlHandlerMapping。事实上,如果没有在XML配置文件中定义任何UrlHandlerMapping,则Spring MVC默认使用BeanNameUrlHandlerMapping。 

Spring还提供了一个ControllerClassNameHandlerMapping,它和BeanName UrlHandlerMapping类似,不过是将Controller的ClassName和对应的URL关联起来,由于这种方式灵活性欠佳,实际使用较少。 

也可以混合使用多种UrlHandlerMapping,但是必须为每个UrlHandlerMapping指定order属性来表示优先级,order值越小优先级越高,Spring会先查询优先级高的UrlHandlerMapping。若找到了对应的Controller,就不再继续查询,否则,按照优先级依次查询,直到找到为止。若所有的UrlHandlerMapping都无法返回一个合适的Controller,并且没有设置默认的Controller时,就会返回给客户端一个“404 Not Found”错误,表示不存在这个URL。 





3、CommonsPathMapHandlerMapping 



------------------------------------ 
HandlerMapping 

AbstractHandlerMapping 

AbstractUrlHandlerMapping 

AbstractDetectingUrlHandlerMapping 

AbstractControllerUrlHandlerMapping 

ControllerBeanNameHandlerMapping 

ControllerClassNameHandlerMapping 

BeanNameUrlHandlerMapping 

DefaultAnnotationHandlerMapping 

SimpleUrlHandlerMapping 

下划线为接口,斜体为抽象类。 

HandlerMapping 的作用是把请求与处理器(如Controller)做一个映射,以便于dispatcherServlet进行请求分发。 

AbstractHandlerMapping实现了Order接口,顾名思义,它是有顺序的。 

AbstractUrlHandlerMapping支持Ant风格(Ant-Style)的路径映射。 

AbstractDetectingUrlHandlerMapping主动检查applicationContext中定义的URL映射。 

AbstractControllerUrlHandlerMapping根据约定(官方文档15.10)为特定的Controller获取URL映射。 

ControllerBeanNameHandlerMapping 、ControllerClassNameHandlerMapping 比较相似,前者根据applicationContext中controller的bean名称做映射,后者直接根据controller的类名做映射。 

BeanNameUrlHandlerMapping根据applicationContext中定义的bean名称决定映射,这些bean不一定是controller,dispatcherServlet默认使用的HandlerMapping之一。 

DefaultAnnotationHandlerMapping在JDK5.0以上是dispatcherSevlet默认使用的HandlerMapping之一,自动扫描@Controller标记的类并且做映射,极大地减少配置文件的重要工具。 

SimpleUrlHandlerMapping直接在配置文件中定义URL映射。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值