在Servlet的原始版本中,假设浏览器同时有多个请求发送到服务器,web服务器在处理第一个请求时,若处理占用时间较长,则其他请求在这第一个请求被处理的时间段内无法进行任何操作。
被阻塞的Servlet请求过程:
Servlet3.0有了新特性异步处理,所谓异步处理就是指数据发送方发送数据给数据接收方后,不必等待数据接收方作出响应,可以继续发送下一个数据的通信方式,Servlet 3.0版本提供了相关异步处理的功能,具体实现方式如下:
-
需要使用注解在对应Servlet配置asyncSupported=true,表示当前Servlet支持异步。
-
通过Request对象的startAsync(Request, Response)方法获取异步上下文对象。
-
通过异步上下文对象调用start(new Runnable(){})方法开始异步处理,Runnable类的run()方法提供具体异步的逻辑代码。
Servlet异步处理流程:
演示:
package com;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax
.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet implementation class AsyncDemoServlet
*/
@WebServlet(urlPatterns = “/AsyncDemoServlet”, asyncSupported &#