聶永的博客

          記錄工作/學習的點點滴滴。

          Servlet 3.0筆記之Servlet的異步特性支持失效怎么辦?

          滿心歡喜的為Servlet 添加上異步支持注解(asyncSupported = true),不曾想,其異步特性完全不起作用,仔細檢測項目,發現存在一個編碼攔截器(Filter),雖使用注解,但未標明支持異步,導致被攔截的標注為異步支持的Servlet,異步特性皆失效。怎么辦,在Filter中注解里面添加asyncSupported = true。問題解決。
          但轉念一想,因歷史原因,遺留系統會存在很多的Servlet 2.*規范的Filter,無法支持異步,怎么辦?全部手動修改為注解版本,可能不太現實。還好,Doug Lea的JUC并發包,為我們提供了一種實現思路。
          實際步驟:
          1. 準備一個線程池
          2. 把當前請求相關屬性包裝進一個任務線程中
          3. 獲取當前任務線程執行結果(不一定會有返回值)
          4. 阻塞,執行完畢或超時,或被中斷異常,可以輸出客戶端
          5. 整個請求結束
          實際上,提交到一個線程池的任務線程,默認會返回一個Future對象,利用Future對象的get方法阻塞的特性,當前請求需要等待任務線程執行的結束,若指定時間內任務線程順利完成,則不必等到設定的時間的邊界即可自然往下執行。
          實際代碼:

          需要備注說明的是,若Future.get()無參數,則意味著需要等待計算完成,然后獲取其結果。這樣可不用設定等待時間了。更多信息,請參考JDK。
          測試代碼下載

          posted on 2012-01-18 10:32 nieyong 閱讀(689) 評論(0)  編輯  收藏 所屬分類: Servlet3Java

          公告

          所有文章皆為原創,若轉載請標明出處,謝謝~

          新浪微博,歡迎關注:

          導航

          <2012年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临江市| 印江| 龙陵县| 新平| 共和县| 兰考县| 苏尼特左旗| 综艺| 临清市| 永德县| 区。| 文安县| 正镶白旗| 栖霞市| 南城县| 衡山县| 夏津县| 嘉定区| 巴东县| 于都县| 秀山| 达尔| 南华县| 松江区| 大荔县| 浦城县| 轮台县| 理塘县| 抚远县| 雅江县| 大安市| 湘潭县| 永平县| 定州市| 咸阳市| 临泽县| 武清区| 嫩江县| 长乐市| 柳江县| 东安县|