亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

高級:使用異步Servlet擴展AJAX應用程序

2019-11-17 05:52:20
字體:
來源:轉載
供稿:網友

作為Web應用程序模型的Ajax的出現使服務器端的面貌發生了巨大的變化。用戶對著Web頁面填寫表單并單擊提交按鈕轉到下一個鏈接的典型Web使用模式現在正在轉變為更先進的客戶端javaScript以及功能更豐富的用戶界面,只要對表單進行操作,比如單擊一個復選框、按下一個鍵或將鼠標移到一個選項卡上,該用戶界面就會不斷地與服務器交互。

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

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

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

此問題的一種解決方案是創建一個擴展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操作,有些過分簡單了。線程池可被用于某些類型的事件處理。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线免费视频| 51视频国产精品一区二区| 久久91超碰青草是什么| 中文字幕免费国产精品| 日韩在线播放视频| 日韩电影网在线| www欧美xxxx| 亚洲a成v人在线观看| 国产欧美精品日韩精品| 成人性生交大片免费观看嘿嘿视频| 国产91精品久久久久| 青青久久aⅴ北条麻妃| 国模吧一区二区三区| 亚洲国产私拍精品国模在线观看| 亚洲一区二区三区四区视频| 国产欧美最新羞羞视频在线观看| 亚洲一区久久久| 日韩欧美中文在线| 欧美一级电影久久| 日韩精品免费在线| 国产亚洲视频在线观看| 日韩视频免费中文字幕| 精品一区二区三区电影| 精品国产欧美成人夜夜嗨| 欧美成人精品xxx| 国产精品日韩欧美大师| 国产精品国产亚洲伊人久久| 亚洲精品久久久久中文字幕欢迎你| 久久天天躁狠狠躁老女人| 久久视频在线视频| 久久精品夜夜夜夜夜久久| 欧美裸体xxxx极品少妇| 久久久国产视频91| 国产欧美一区二区三区在线| 在线成人免费网站| 亚洲女人天堂色在线7777| 91成人性视频| 久久精品99久久久久久久久| 久久久久www| 日韩精品中文字幕视频在线| 日本午夜精品理论片a级appf发布| 最好看的2019年中文视频| 国内精品久久久久久影视8| 91干在线观看| 九九热精品视频| 欧美国产日韩精品| 国产精品久久久久久久app| 亚洲欧美日韩在线高清直播| xxxxx91麻豆| 国产精品高潮呻吟久久av黑人| 色视频www在线播放国产成人| 亚洲黄色在线看| 欧美性xxxxxx| 欧美久久精品午夜青青大伊人| 亚洲人午夜精品免费| 在线视频日韩精品| 久久久国产一区二区三区| 国产精品草莓在线免费观看| 中文字幕亚洲天堂| 日韩免费中文字幕| 一区二区三区黄色| 色av吧综合网| 国产91ⅴ在线精品免费观看| 伊人青青综合网站| 国产一区二区av| 日韩欧美亚洲成人| 一级做a爰片久久毛片美女图片| 成人亚洲欧美一区二区三区| 日韩精品中文字| 日韩欧美亚洲国产一区| 亚洲欧美综合精品久久成人| 亚洲大胆美女视频| 欧美激情视频在线免费观看 欧美视频免费一| 久久久国产在线视频| 欧美与黑人午夜性猛交久久久| 亚洲国产精品yw在线观看| 国产精品久久久久久av福利| 亚洲人成电影在线播放| 成人美女免费网站视频| 九九热视频这里只有精品| 国产精品久久久久久久久久久久久久| 91精品国产免费久久久久久| 成人妇女免费播放久久久| 欧美日韩性视频在线| 正在播放亚洲1区| 欧美日韩亚洲激情| 国产精品99久久久久久白浆小说| 日日狠狠久久偷偷四色综合免费| 亚洲精品国精品久久99热| 久久夜色撩人精品| 日韩欧美在线中文字幕| 亚洲福利在线观看| 操日韩av在线电影| 欧美日韩中文字幕日韩欧美| 亚洲一区二区三| 夜夜躁日日躁狠狠久久88av| 7m第一福利500精品视频| 91精品啪aⅴ在线观看国产| 青青久久av北条麻妃海外网| 懂色av一区二区三区| 欧美综合国产精品久久丁香| 欧美高清电影在线看| 欧洲永久精品大片ww免费漫画| 亚洲欧美精品在线| 国产做受高潮69| 日韩美女免费线视频| 中文字幕久热精品在线视频| 欧美孕妇与黑人孕交| 久久好看免费视频| 欧美性69xxxx肥| 91久久久久久久久久| 日韩欧美国产激情| 国产日韩在线观看av| 久久偷看各类女兵18女厕嘘嘘| 国产999精品久久久影片官网| 亚洲摸下面视频| 成人国产在线激情| 亚洲欧美国产日韩天堂区| 欧美性猛交xxxx免费看漫画| 在线播放日韩精品| 日韩在线视频导航| 日韩视频免费观看| 国产在线拍揄自揄视频不卡99| 欧美日韩国产精品一区二区不卡中文| 热re99久久精品国产66热| 色777狠狠综合秋免鲁丝| 久久人人爽人人爽人人片av高清| 久久免费高清视频| 亚洲日韩欧美视频| 久久夜色撩人精品| 欧美性猛交xxxx免费看漫画| 日韩在线中文字| 日本成熟性欧美| 奇米4444一区二区三区| 成人网址在线观看| 国产精品国产自产拍高清av水多| 国产福利视频一区二区| 久久成人精品电影| 国产xxx69麻豆国语对白| 日韩免费视频在线观看| 午夜精品久久久久久99热| 欧美激情乱人伦一区| 亚洲欧美日韩成人| 亚洲精品一区二三区不卡| 欧美精品成人91久久久久久久| 精品久久久久久中文字幕大豆网| 亚洲成人久久久| 亚洲国产成人在线视频| 日韩精品福利在线| 色哟哟网站入口亚洲精品| 欧美视频在线观看 亚洲欧| 亚洲区bt下载| 国产z一区二区三区| 91av视频在线| 北条麻妃一区二区在线观看| 精品网站999www| 日本久久91av| 亚洲精品国产品国语在线| 久久精品国产欧美亚洲人人爽| 好吊成人免视频| 亚洲第一色中文字幕| 国产日韩精品在线| 日韩av理论片| 91免费综合在线|