91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

異步Servlet在AJAX程序中的應用方法是什么

發布時間:2021-12-27 16:27:43 來源:億速云 閱讀:121 作者:iii 欄目:編程語言

本篇內容主要講解“異步Servlet在AJAX程序中的應用方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“異步Servlet在AJAX程序中的應用方法是什么”吧!

異步Servlet也一直在考慮從客戶端傳輸到服務器的數據量有多大的問題。從可用性的角度來看,用戶在一個薄客戶端瀏覽器上獲得了富用戶界面,無需安裝任何東西。但是,當在服務器端擴展這些應用程序時就要付出代價了。AJAX應用程序的典型容量規劃數可能會是標準Web應用程序的3到4倍。

構建于異步Servlet理念的基礎之上的這種范型,有人可能會問:這對WebLogic Server有何影響?每個發送給WebLogic的HTTP請求都要使用一個執行線程。根據AJAX編程的性質以及許多短期的請求會以輪詢的形式不斷發送的情況,該行為模式可能造成大量客戶端請求不斷沖擊服務器的局面。多年來,WebLogic都將這一問題考慮在內,并構建了一個相當棒的特性,即FutureResponseServlet。從版本6.1開始,該功能就允許開發人員提供真正異步的來自服務器的通知,而無需對事件進行客戶端輪訓并在服務器端使用執行線程。在9.x之前,BEA還不急于公開該類。

如何在現實中利用該類呢?我們來看一個例子。假定業務需求是要構建一個基于Web的應用程序,該應用程序以近乎實時的方式向服務器發送數據而無需刷新瀏覽器。這樣的應用程序可以向服務器提交一個需要花很長時間處理的請求,而仍然能夠接收到關于其狀態的異步事件并監聽事件。從技術角度來看,這有許多實現方法。其中一種方法就是使用一個與Java Servlet通信的Java Applet來獲得異步信息。這是一種不錯的方法,但是對于用戶來說有些不太方便,因為他們必須下載一個JVM,還要下載一個Applet到瀏覽器。此外,還必須維護一個從客戶端到服務器的持久性套接字連接,以便接收異步消息。設想一下,如果有1000個用戶使用該Applet,那么就有1000個執行線程幾乎是在空等著發送事件通知到客戶端。當然了,還有其它方法,比如從Applet或AJAX應用程序構建輪詢機制來定期檢查新數據。而如果不經常接收到數據,那么輪詢就顯得無用了,而且還浪費了服務器資源,占用了執行線程。反之,服務器可以定期輪詢,將事件傳播回客戶端,并維護套接字線程,而無需使用持久性執行線程。這非常類似于Java NIO的運行方式。理想情況下,我們都希望構建一個從服務器“異步”接收事件通知而無需在服務器端使用持久性執行線程的應用程序,不管它是一個applet還是一個基于AJAX的薄Web應用程序。

異步Servlet特別的出現在這里面對此問題,其中一種解決方案是創建一個擴展FutureResponseServlet類的Servlet。瀏覽器建立了到FutureResponseServlet類的單一連接,并在另一個線程中將它自身注冊為一個監聽程序。只要在服務器端接收到一個事件,線程就向客戶端通知該事件。服務器與客戶端保持異步,無需使用持久性執行線程。該模型可擴展用于多個并發用戶的情況。

本文并不打算介紹如何構建AJAX應用程序。這方面的文章已經有很多了。本文的重點在于討論表示層(比如AJAX、Applet或者任何前端應用程序)的異步處理的重要性。清單1展示了一個例子。

import java.io.IOException;   import java.io.PrintWriter;   import java.util.Date;   import java.util.Stack;    import javax.servlet.ServletException;   import javax.servlet.http.HttpServletRequest;    import weblogic.servlet.FutureResponseServlet;   import weblogic.servlet.FutureServletResponse;    // An AsynchronousServlet that handles HTTP requests from a "separate" thread and   // not the execute thread used to invoke this servlet.   public class AsynchronousServerResponseServlet extends FutureResponseServlet {        private final Notifier notifier;       public AsynchronousServerResponseServlet() {       this.notifier = new Notifier();       this.notifier.start();     }         public void service(HttpServletRequest request, FutureServletResponse response) throws IOException,ServletException {    // push this client's request to a buffer and return immediately.       // asynchronous processing occurs in the run method of the Notifier Thread       notifier.poll(request, response);     }         class Notifier extends Thread {    private static Stack clients = new Stack();    void poll (HttpServletRequest request, FutureServletResponse response) {     clients.push(new Client(request, response));       }       public void run() {    while (!clients.empty()) {      Client client = null;      try{    client = (Client) clients.pop();    PrintWriter pw = client.response.getWriter();    for(int j = 0; j < 10; j++) {      pw.println("Time is:" + new Date() + "");      pw.flush();  }    pw.close();      }      catch(Throwable t) {    t.printStackTrace();      }      finally {    try {     client.response.send();     }   catch(IOException ioe) {     ioe.printStackTrace();    }      }     }      }    }     // inner class that holds o-n to the clients http request and response    class Client {      private HttpServletRequest request;      private FutureServletResponse response;   private Client(HttpServletRequest request, FutureServletResponse response) {    this.request = request;    this.response = response;      }    }

可以看出,該例子非常簡單。AsynchronousServerResponseServlet類擴展了FutureResponseServlet,并重寫了service方法。只使用一個線程(即Notifier類)來處理所有的客戶端連接響應。對于每個HTTP請求,Servlet向Notifier線程注冊套接字連接,然后返回。異步事件被交付給客戶端,而持久性套接字連接被維持。

單個線程可管理多個客戶端連接!run()方法可用于根據某種消息選擇條件回調事件到客戶端。該例子只執行了一個服務器端的push操作,有些過分簡單了。線程池可被用于某些類型的事件處理。

異步Servlet的應用總而言之,在處理長期運行的任務時,FutureResponseServlet是一個好特性,它允許開發人員提高性能,在獨立的線程中處理響應,并將開銷降至***。在構建異步Servlet應用程序時,該方法支持可伸縮性。

到此,相信大家對“異步Servlet在AJAX程序中的應用方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

明光市| 通海县| 永胜县| 厦门市| 涡阳县| 修水县| 板桥市| 勐海县| 英德市| 太原市| 清涧县| 巨野县| 安泽县| 清流县| 淮阳县| 英吉沙县| 喀喇沁旗| 嘉鱼县| 儋州市| 墨脱县| 和硕县| 景洪市| 霍城县| 阿克苏市| 桃园市| 赞皇县| 泾川县| 新津县| 怀化市| 公主岭市| 开鲁县| 类乌齐县| 乐昌市| 密山市| 盈江县| 绥宁县| 酉阳| 沁阳市| 晋中市| 竹溪县| 焉耆|