在收到请求的时候,DispatcherServlet将请求交给处理器映射(HandlerMapping),让它找出对应的请求的HandlerExceptionChain对象。
HandlerExceptionChain顾名思义是一个执行链,它包含一个处理该请求的处理器(handler),同时可以包括若干个对该请求实施拦截的拦截器(HandlerInterceptor)。当HandlerMapping返回HandlerExceptionChain后,DispatcherServlet将请求交给定义在HandlerExceptionChain中的拦截器和处理器一并处理。
HandlerExceptionChain是负责处理请求并返回ModelAndView的处理执行链,其结构如下:
请求在被Handler执行的前后,链中装配的HandlerInterceptor会实施拦截操作。
对于拦截器的几大接口:
- boolean preHandler
在请求到达handler前,会执行该方法。当该方法返回false的时候,直接请求返回,不会传递到下一个拦截器,更不会调用处理器链末端的handler中。
- void postHandle
在请求被HandlerAdapter执行后,执行这个后置处理方法。
- void afterCompletion
在响应已经被渲染之后,执行该方法。
在位于处理器链末端的是一个Handler,DispatcherServlet通过HandlerAdapter适配器对Handler进行封装,并按统一的适配器接口对handler处理方法进行调用。
<mvc:interceptors>
<mvc:interceptor>
<mapping path="/secure/*"/>
<hean class="xxxx.xxx.xxxx"/>
</mvc:interceptor>
</mvc:interceptors>
PS:对于具体的
springMVC3.X --- Configuring springMVC
的配置:http://hi.baidu.com/bosscheng1210/item/fb7ab7cea210762646d5c081
里面有详细的介绍。。。