继承HandlerInterceptor用的异步请求处理开始之后调用的回调方法。
当处理程序开始的异步请求, DispatcherServlet退出,而不调用postHandle和afterCompletion因为它通常不用于同步请求,由于请求处理的结果(例如ModelAndView的)可能还没有准备好,将被从另一个线程同时产生的。 在这样的场景, afterConcurrentHandlingStarted代替调用,从而允许实现来执行任务,例如释放线程Servlet容器之前清理线装属性。
当异步处理完成时,请求被调度到用于进一步处理的容器。 在这个阶段, DispatcherServlet调用preHandle , postHandle和afterCompletion 。 到初始请求和异步处理完成之后后续的调度之间进行区分,拦截器可以检查是否javax.servlet.DispatcherType的javax.servlet.ServletRequest是"REQUEST"或"ASYNC" 。
需要注意的是HandlerInterceptor的实现可能需要做的工作,当一个异步请求超时,或者完成与网络错误。 对于这样的情况下,Servlet容器不会调度,因此postHandle和afterCompletion方法将不会被调用。 相反,拦截器可以注册来跟踪通过的异步请求registerCallbackInterceptor和registerDeferredResultInterceptor上的方法WebAsyncManager 。 这可以主动地从每一个请求进行preHandle不管异步请求处理是否将开始。
以来:
3.2
也可以看看:
org.springframework.web.context.request.async.WebAsyncManager , org.springframework.web.context.request.async.CallableProcessingInterceptor , org.springframework.web.context.request.async.DeferredResultProcessingInterceptor
SpringMVC源码解析之AsyncHandlerInterceptor异步的处理器拦截器
原创公众号JavaEdge ©著作权
©著作权归作者所有:来自51CTO博客作者公众号JavaEdge的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
axios拦截器异步 axios拦截器顺序
我们在使用 Axios 的过程中,或多或少地要用到它的拦截器,例如要实现:数据转换;添加额外的数据;输出或上报接口的请求时间、失败率等数据;这些需求,使用拦截器就能非常容易地实现。那么 axios 的拦截器怎么使用,内部又是怎么实现的,这篇文章让我们一探究竟。1. 拦截器的使用在 axios 中,拦截器分为请求拦截器和响应拦截器。顾名思义,请求拦截器是在发出请求之前按照顺序执行的,响应拦截器是在收
axios拦截器异步 axios某一接口失败后不调用 为什么拦截器把正常请求也拦截了 拦截器 拦截返回结果 拦截器如何获取@requestbody