所謂異步處理就是指數據發送方發送數據給數據接收方後,不必等待數據接收方作出響應,可以繼續發送下一個數據的通信方式。
Servlet 3.0版本提供了相關異步處理的功能,具體實現方式如下:
- 需要使用註解在對應Servlet配置asyncSupported=true,表示當前Servlet支持異步。
- 通過Request對象的startAsync(Request, Response)方法獲取異步上下文對象。
- 通過異步上下文對象調用start(new Runnable(){})方法開始異步處理,Runnable類的run()方法提供具體異步的邏輯代碼。
根據上述步驟,通過一個代碼實例演示。
@WebServlet(urlPatterns="/async",asyncSupported=true)
public class AsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
// 設置響應類型及編碼格式
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("馬上開始:<br/>");
// 刷新緩衝區
resp.getWriter().flush();
// 獲取異步上下文對象
final AsyncContext ac = req.startAsync(req, resp);
// 開始異步處理
ac.start(new Runnable() {
@Override
public void run() {
try {
for (char ch = 'A'; ch <= 'Z'; ch++) {
resp.getWriter().print(ch);
resp.getWriter().flush();
Thread.sleep(250);
}
// 表示異步處理完畢
ac.complete();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
}
轉載說明:請註明作者及原文鏈接,謝謝!