使用原生servlet的异步请求
Servlet 3.0及更高版本
声明为异步请求方式1:注解
@WebServlet(urlPatterns = {"/asyncServlet"}, asyncSupported = true)
public class AsyncServlet extends HttpServlet {
// ...
}
声明为异步请求方式2:初始化方法中设置
@Override
public void init() throws ServletException {
super.init();
getServletConfig().getServletContext().setAsyncSupported(true);
}
处理业务
在doGet或者doPost中,启用新线程处理,不使用新线程处理也行,因为将Servlet设置为了异步
Thread backgroundThread = new Thread(new Runnable() { });
异步请求的结果
- 用Servlet的异步特性仍然会改变请求的生命周期和过滤器链的执行方式,会多次进入过滤器
流程
- 当你使用异步处理时,Servlet容器不会立即将响应发送回客户端,而是将请求挂起,允许你在后台处理它。一旦处理完成,你可以通过
AsyncContext对象来恢复请求的处理并生成响应。在这个过程中,过滤器链可能会被再次触发,具体取决于你何时恢复请求的处理。
废话短说