Java EE 6新特性之Servlet 3.0的異步處理
原創(chuàng)【51CTO精選譯文】在之前51CTO翻譯的的Java EE 6系列中,我們介紹了Servlet 3.0:JSR 315規(guī)范是Servlet技術(shù)的最新版本,這個規(guī)范的草案于2009年6月發(fā)布,并加入到Java EE 6當(dāng)中來。Servlet 3.0中加入了對異步處理的支持,Servlet線程不用再等待資源如數(shù)據(jù)庫的響應(yīng),在收到響應(yīng)前可以繼續(xù)處理其它事情,這個支持使持續(xù)客戶端連接成為可能,如聊天室應(yīng)用程序,有了異步處理的支持,Servlet和Ajax的搭配使用效率會更好。
為了確保為同步處理編寫的代碼不被用于異步上下文中,Servlet 3.0要求你在@WebServlet注解中將asyncSupported屬性設(shè)為true,你也可以在@WebFilter注解中將asynchSupported屬性設(shè)為true使Servlet過濾器也支持異步。
異步處理也包括ServletRequest方法,如startAsync(),它產(chǎn)生一個異步請求和新的類,如AsyncContext,這個類為異步操作提供執(zhí)行上下文。
下面是一個處理異步請求的Servlet示例:
- @WebServlet(name="CalculatorServlet", asyncSupported=true, urlPatterns={"/calc", "/getVal"})
- public class CalculatorServlet extends HttpServlet{
- public void doGet(HttpServletRequest req, HttpServletResponse res) {
- ...
- AsyncContext aCtx = req.startAsync(req, res);
- }
- ...
- }
#t#注意startAsync()方法返回AsyncContext對象。
Servlet 3.0也包括一個新的監(jiān)聽器類AsyncListener,當(dāng)一個異步操作完成或超時時它會通知你,AsyncContext類包括一個complete()方法,當(dāng)異步操作完成時你可以用它提交響應(yīng),AsyncListener類有一個dispatch()方法,它可以將異步請求轉(zhuǎn)發(fā)給容器,以便其它框架,如JSP可以產(chǎn)生響應(yīng)。
【51CTO.com譯稿,非經(jīng)授權(quán)請勿轉(zhuǎn)載。合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com,且不得修改原文內(nèi)容?!?/p>
原文:Introducing the Java EE 6 Platform 作者:Ed Ort