http容器->过滤器->servlet->拦截器->controller方法->拦截器->servlet->过滤器->http容器。 这是一个请求的回路,有进有出。
javax.servlet.Filter 1、由Servlet规范定义 2、不可以获得spring内部bean
类定义:org.springframework.web.servlet.HandlerInterceptor 1、spring web 内部定义 2、可以获得spring内部bean
方法都有这三个参数:HttpServletRequest request, HttpServletResponse response, Object handler 1、preHandle 2、postHandle 有一个 ModelAndView modelAndView 参数 执行时间:DispatcherServlet渲染view之前 3、afterCompletion 另外有一个 Exception ex 参数 执行时间:在请求处理完成,渲染完view之后 作用:可以清理资源,处理异常
除了HandlerMethod还有
org.springframework.web.method.HandlerMethod 保持最终被执行方法的pojo,spring web中指Controller中处理请求的方法。 成员变量. bean
DispatcherServlet 加载所有的 HandlerMapping实例,所有HandlerAdapter实例。请求过来的时候,从所有HandlerMapping实例中找到当前请求的Handler(如果框架使用的是RequestMappingHandlerMapping,得到的handler实例就是HandlerMethod),然后把handler封装成HandlerExecutionChain,然后在所有HandlerAdapter实例中获得可以支持该handler的HandlerAdapter(每个实例都有支持的handler的判断,框架默认的adapter是RequestMappingHandlerAdapter),拿到了hander和adapter就可以执行具体的业务了。
org.springframework.web.servlet.HandlerMapping 此接口只定义一个方法:为了找到请求的执行程序。 如果已有的HandlerMappign实现中没有能够满足你所需要的规则时,可以通过实现HandlerMapping接口进行扩展
HandlerExecutionChain getHandler(HttpServletRequest request) 返回此请求的处理程序和所有拦截器。
类定义:org.springframework.web.servlet.HandlerExecutionChain 处理者和执行链路封装:包含Handler和一些HandlerInterceptor实例。
?
org.springframework.web.servlet.HandlerAdapter 该适配器使调用方与具体程序的执行解耦。 可以支持调用Object类型的执行程序,可以与其它框架融合。
该adapter是否支持该handler实例 boolean supports(Object handler) 具体的处理业务逻辑。使用hadnler处理request。 ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
是一个抽象概念。 经常用到的是 HandlerMethod
org.springframework.web.method.HandlerMethod
参考
spring boot 过滤器、拦截器的区别与使用
Spring 注解(一)Spring 注解编程模型
Spring MVC HandlerMapping HandlerAdapter