背景:
在异步线程中获取了request中的参数,然后下一个请求是get请求的话,会偶尔出现参数丢失的问题.
提示没有传参数,实际传了.
原因:
tomcat 会复用Request对象
结论:
在异步线程中使用request
- 使用异步前先获取 AsyncContext
AsyncContext asyncContext = request.startAsync();
- 使用线程池处理任务
asyncDo();
- 任务完成后调用asyncContext.complete()
在处理异步线程时,若从Tomcat的Request对象中获取参数并进行后续GET请求,可能会遇到参数丢失的状况。这是因为Tomcat会复用Request对象。为避免这个问题,应当在开始异步操作前获取AsyncContext,如`AsyncContext asyncContext = request.startAsync();`,然后在处理任务后调用`asyncContext.complete()`。遵循此方法可以确保异步线程中正确处理请求参数。
在异步线程中获取了request中的参数,然后下一个请求是get请求的话,会偶尔出现参数丢失的问题.
提示没有传参数,实际传了.
tomcat 会复用Request对象
在异步线程中使用request
AsyncContext asyncContext = request.startAsync();
asyncDo();
3645
3251

被折叠的 条评论
为什么被折叠?