Spring HTTP请求过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring HTTP请求过程相关的知识,希望对你有一定的参考价值。

参考技术A (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)最后依次返回结果

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

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

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

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

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

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

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

processDispatchResult中回调afterCompletion

以上是关于Spring HTTP请求过程的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC的请求过程解析

Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程

Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程

Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程

Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程

Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程