SpringMVC拦截器中对HTTP的处理
2025年5月2日大约 1 分钟
SpringMVC拦截器中对HTTP的处理
HTTP请求模型中
在HTTP请求模型中,每个 HTTP 请求(无论访问什么路径)都会分配到 一个独立的线程 来处理。每个请求的生命周期是独立的,当请求结束时,线程也随之结束。
例如,访问 /userinfo 路径,会由一个http请求,一个线程处理。随后访问 /cart 路径,它会分配给另一个http请求,另一个线程来处理。
同一次请求的概念
如果访问/goods/list这个接口,那么这次http请求先经过拦截器,然后再根据接口路径匹配controller中的对应接口路径的业务逻辑,然后返回该接口的响应结果,最后这个http请求的线程才算是结束。(所以也可以得出在当前的一次请求中,不管有多少层拦截器,拦截器之间同样也是在一个线程中)
特性应用
根据上述特性,可以解答ThreadLocal的存储和取出问题
例如:查询某个用户的购物车数据,此时就要从THD中取出用户ID
携带请求头token访问购物车接口,此时线程开始。首先登陆拦截器解析token然后存储用户信息到当前线程的thd中,接下来就是来到controller根据请求路径匹配对应的业务,然后就是service中就可以取出THD中存储的值继续完成业务逻辑,最后响应接口数据,当前线程结束,THD数据清除。
如果是又访问另外一个接口,则重复又开启新的线程,重复上述操作