2024-03-26
目录
Servlet和Filter的关系
Servlet是什么?
运行在web服务器上的一个应用组件,用来处理http请求,接收参数、处理数据、响应数据
Filter是什么?
在Servlet真正处理数据之前,过请求进行识别并过滤的作用,可以获取到请求的全部数据(但不建议获取数据,ServletRequest 默认实现只能读取一次请求体中的数据,否则在Servlet中就无法获取到请求体中的数据了)
Servlet和Filter的关系是什么?
它们有执行的前后问题,Filter在前,Servlet在后,如果Filter的doFilter方法中return了,则该请求直接结束,不会进入servlet中执行业务
一个客户端请求重复进入Filter的情况
- 如果一个请求进入了servlet中执行业务逻辑,servlet根据业务将请求转发或者重定向(相当于客户端重新发送了一个http请求)到另外一个servlet时,过滤器链开始重新执行;
- 异步请求:客户端发送请求后,不必等待服务器立即响应,可以继续执行其他任务或接收其他数据。服务器会在后台处理该请求,并在处理完成后,通过某种方式(如回调函数、WebSocket、Server-Sent Events等)将结果通知给客户端
避免一个客户端请求重复进入Filter
自定义的Filter 实现 OncePerRequestFilter 即可,spring 提供了相关的逻辑
废话短说