首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring 投射

2012-09-14 
Spring 映射在配置文件定义URL的映射方式(HandlerMapping)。Spring提供了几种常用的HandlerMapping。1.使用S

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

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

这种方式和Struts的配置类似。当用户请求一个URL时,Spring就在SimpleUrl HandlerMapping注入的Properties中查找对应的Controller。


2.使用BeanNameUrlHandlerMapping

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




(今天写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映射。


热点排行