Spring HTTP请求过程

1.Spring Http请求全过程

http请求过程

(1)浏览器的http请求,被Tomcat容器的监听器监听到

(2)请求通过Filter链,到达前置分发器DispatcherServlet

(3)前置分发器DispatcherServlet接收到HTTP请求之后,通过解析HTTP请求的URL获取URI,根据URI从处理器映射HandlerMappings当中获取请求对应的处理器Handler和处理器拦截器HandlerInterceptor

(4)前置分发器DispatcherServlet根据获取得到的Handler选择合适的适配器HandlerAdapter。如果成功获取适配器HandlerAdapter,先调用HandlerInterceptor#preHandler,然后调用处理器Handler,也就是Controller方法

(5)Controller Handler调用Service的业务处理方法

(6)Service调用DAO的数据处理方法

(7)最后依次返回结果

2.过滤器(Filter)

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,在HttpSerlvetRequest到底Servlet之前,拦截HttpServletRequest,根据需要检查HttpServletRequest,也可以修改HttpServletRequest Header和数据。主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。

Filter接口

自定义Filter,可以继承该Filter接口或者OncePerRequestFilter接口,然后在接口上面添加@Order(过滤器的顺序)、@WebFilter(过滤器,主要的参数是:filterName 为过滤器名字,urlPatterns 为过滤器的范围,initParams 为过滤器初始化参数)注解。最后在启动类增加注解,自动注册Filter。

自定义Filter

Spring结构中主要在ApplicationFilterChain中,进行做Filter循环调用,最后调用到DispatcherServlet#service的方法。

ApplicationFilterChain#doFilter
ApplicationFilterChain#internalDoFilter

3.HandlerInteceptor

HandlerInterceptor中有三个接口,如下所示

HandlerInterceptor接口

preHandler方法在调用Controller方法之前,根据返回的值,判断是否调用Controller方法

postHandler方法在调用Controller方法之后调用

afterCompletion方法,在request 调用返回之后回调

DispatcherServlet#doService
DispatcherServlet#doDispacth

processDispatchResult中回调afterCompletion

DispatcherServlet#proccessDispatchResult
triggerAfterCompletion

4.Filter vs HandlerInterceptor

filter vs HandlerInterceptor
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。