处理器映射(HandlerMapping)
从哪⼉来的? 当收到请求时,DispatcherServlet将请求传递给⼀个 [b]处理器映射[/b] ,让它对请求进⾏检查 并寻⼀条匹配的 [b]处理器执⾏链 (HandlerExecutionChain)[/b],然后DispatcherServlet就会执⾏定义在这条链中的 处理器 和 . 呵呵,很简单,就是这样的.
在 [b]处理器映射 [/b]中有很强⼤的⼀招 : [color=red]配置[/color].包括了处理器执⾏前,执⾏后,以及执⾏前后这三种.
还可以⾃定义 [color=blue]HandlerMapping[/color] 来⽀持更多的功能, ⽐如不仅仅根据请求的URL, 还要根据和请求相关的session状态来选择 处理器。
最常⽤的 处理器映射,有两个: BeanNameUrlHandlerMapping , SimpleUrlHandlerMapping , 他们都是 AbstractHandlerMapping 的⼦类. 因此也继承了如下重要属性:
[b][1] interceptors[/b] : 在映射中使⽤的的列表.对,是列表,因为在在配置⽂件中设置的⽅式是:
<property name="interceptors">
<list>
<ref bean="..."/>
</list>
</property>⽽且,查了 AbstractHandlerMapping 的原代码,interceptors属性的类型是Object[]. :oops:
[b][2] defaultHandler[/b] : 默认的处理器. 没有合适的处理器可以匹配请求时,就⽤它啦.
[b][3] order[/b] : 由于在Spring上下⽂中可以同时使⽤多个处理器映射, 就需要⼀个选择机制了 ( DispatcherServlet需要传递请求给⼀个处理器映射 嘛 ). order属性就是⼲这个事情的.它的值越⼩,优先级越⾼.也就被DispatcherServlet选中咯. 同样是查了⼀下原代码,在AbstractHandlerMapping 中, 属性 order 被初始化为 [color=blue]Integer.MAX_VALUE[/color] , :idea: 呵呵,是不是很有想法啊 ,⾃⼰⼀边乐去 ! :arrow:
[b][4] urlDecode[/b] : 这个属性默认为false. 因为HttpServletRequest对象默认返回未解码的请求URI/URL. HttpServletRequest中的请求URL和URI还处于HTTP协议所定义的编码状态,如果你想在 处理器映射 使⽤它们 发现合适的处理器之前 对URL进⾏解码,你应该把这个属性设成true (注意这需要JDK 1.4的⽀持)。解码⽅法会选⽤HTTP请求中指定的编码格式,或缺省的ISO-8859-1编码⽅法。HTTP请求中⼀般会声明编码的格式,如果没有的话,默认值是ISO-8859-1。Spring会使⽤相应的解码算法。
[b][5] lazyInitHandlers [/b]: 这个属性的默认值是false. 该属性允许你设置 是否延迟 singleton处理器的初始化⼯作 ( prototype处理器的初始化都是延迟的 ) 。
[color=red][b]注意:后三个属性只有 AbstractUrlHandlerMapping 的⼦类才具有哦.[/b][/color]
不得不再罗嗦⼏句 AbstractHandlerMapping 与 AbstractUrlHandlerMapping ,前者继承⾃ WebApplicationObjectSupport ,并实现了 HandlerMapping 和 Ordered 接⼝; AbstractUrlHandlerMapping 直接继承了 AbstractHandlerMapping ; BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping 都是直接继承 AbstractUrlHandlerMapping .
>url编码处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论