国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Future Response Servlet特性

開發 后端
本文介紹Future Response Servlet特性,以及重點在于討論表示層的異步處理的重要性。

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

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

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

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

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

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

  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3. import java.util.Date;  
  4. import java.util.Stack;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import weblogic.servlet.FutureResponseServlet;  
  8. import weblogic.servlet.FutureServletResponse;  
  9. // An AsynchronousServlet that handles HTTP requests from a "separate"
     thread and  
  10. // not the execute thread used to invoke this servlet.  
  11.  
  12. public class AsynchronousServerResponseServlet extends 
    FutureResponseServlet {  
  13. private final Notifier notifier;  
  14. public AsynchronousServerResponseServlet() {  
  15. this.notifier = new Notifier();  
  16. this.notifier.start();  
  17. }  
  18. public void service(HttpServletRequest request, 
    FutureServletResponse response)  
  19. throws IOException,ServletException {  
  20. // push this client's request to a buffer and return immediately.  
  21. // asynchronous processing occurs in the run method of the Notifier Thread  
  22.  
  23. notifier.poll(request, response);  
  24. }  
  25. class Notifier extends Thread {  
  26. private static Stack clients = new Stack();  
  27. void poll (HttpServletRequest request, FutureServletResponse response) {  
  28. clients.push(new Client(request, response));  
  29. }  
  30. public void run() {  
  31. while (!clients.empty()) {  
  32. Client client = null;  
  33. try{  
  34. client = (Client) clients.pop();  
  35. PrintWriter pw = client.response.getWriter();  
  36. for(int j = 0; j < 10; j++) {  
  37. pw.println("Time is:" + new Date() + "");  
  38. pw.flush();  
  39. }  
  40. pw.close();  
  41. }  
  42. catch(Throwable t) {  
  43. t.printStackTrace();  
  44. }  
  45. finally {  
  46. try {  
  47. client.response.send();  
  48. }  
  49. catch(IOException ioe) {  
  50. ioe.printStackTrace();  
  51. }  
  52. }  
  53. }  
  54. }  
  55. }  
  56. // inner class that holds o-n to the clients http request and response  
  57.  
  58. class Client {  
  59. private HttpServletRequest request;  
  60. private FutureServletResponse response;  
  61. private Client(HttpServletRequest request, FutureServletResponse response) {  
  62. this.request = request;  
  63. this.response = response;  
  64. }  

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

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

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

【編輯推薦】

  1. Struts和JSP頁面的技術
  2. 詳解JSP向Servlet轉換
  3. Servlet2.5版本的特征淺析
  4. 淺談Servlet/JSP服務器端的重定向
  5. Ajax Servlet實例在網絡編程的應用
責任編輯:佚名 來源: IT168
相關推薦

2009-07-08 13:19:25

Future Resp

2009-07-08 09:35:53

Java ServleServlet 3.0

2013-09-02 09:18:59

2009-07-09 10:49:56

Servlet和JSP

2010-04-30 09:19:05

Servlet 3.0

2010-01-14 09:15:07

Java EE 6Servlet 3.0異步處理

2023-04-23 08:49:17

Java接口Future

2009-07-06 14:05:50

Servlet編程Servlet顯示圖片

2017-06-15 13:29:12

AkkaSpark異步

2009-07-03 10:31:57

什么是ServletServlet API

2009-07-09 11:27:59

Servlet容器

2009-07-09 15:05:45

Servlet實例

2020-08-18 10:20:50

Java 編程開發

2013-02-26 09:23:16

JavaJava類接口

2011-11-18 10:50:25

設計模式Java線程

2010-03-05 10:47:05

Python futu

2022-08-31 08:48:51

ARXRMetaverse

2025-01-15 09:06:57

servlet服務器Java

2022-03-31 15:17:04

JavaSocketServlet容器

2009-07-10 18:10:18

Jython編寫SerJython
點贊
收藏

51CTO技術棧公眾號

麻豆精品一区二区综合av| 粉嫩aⅴ一区二区三区四区| 精品视频—区二区三区免费| 波多野结衣在线| 国产精品久久久久久久久免费樱桃| 欧美一级黄色录像片| 久久福利精品| 欧美激情一区二区三区在线视频 | 成人在线视频网址| 免费在线观看视频一区| 亚洲图片欧洲图片av| av中文字幕在线观看| 91国内精品野花午夜精品| 国产免费福利| 亚洲黄网站在线观看| 国产精品v日韩精品v在线观看| 91丨国产丨九色丨pron| 少妇高潮喷水在线观看| 不卡视频在线观看| 日韩精品在线观看网站| 国产极品嫩模在线观看91精品| 成人av电影在线| 黄色一级片国产| 国产高清精品久久久久| 久久综合久久久久| 成人av综合在线| 中国丰满人妻videoshd| 91麻豆产精品久久久久久| 国产麻花豆剧传媒精品mv在线 | 97久久超碰国产精品| 亚洲一区二区影院| 免费精品国产的网站免费观看| 久久精品视频在线| 91在线一区| 国产精品久久久久久久久久小说| 欧美一区2区| 97自拍视频| 日本在线不卡一区| 欧美日韩在线免费观看视频| 成人教育av在线| a视频免费看| 在线观看视频一区二区欧美日韩| av官网在线播放| 亚洲精品videossex少妇| 国产激情综合| 91黄色精品| 国产福利一区二区三区视频| 18成人免费观看网站下载| 亚洲成人中文字幕| 理论片午夜视频在线观看| 在线观看亚洲视频| 欧美伦理影院| 午夜久久资源| 国产精品污www在线观看| 最近中文字幕在线| 日韩av中文在线| 欧美91在线| 国产精品综合久久久久久| 国产揄拍国内精品对白| 成人h动漫在线| 日韩欧美久久久| 国内自拍欧美| 欧美一区三区二区在线观看| 国产欧美综合色| 91最新在线视频| 欧美一级免费视频| 午夜在线播放视频欧美| 午夜激情福利在线| 欧美日韩视频在线第一区| 国产91欧美| 国产精品播放| 国产精品无码永久免费888| 国产成人l区| 日韩av大片在线| 国产精品一区二区久久不卡 | gogogo影视剧免费观看在线观看| 日韩欧美国产电影| 国产欧美日韩视频在线| 国产成人生活片| 欧美在线999| 国产日韩三级| 亚洲日本精品| 欧美午夜女人视频在线| 成人在线视频区| 欧美午夜精品久久久久免费视 | 免费看av软件| 欧美日韩视频在线| 精品国模一区二区三区欧美| 麻豆久久久9性大片| 日韩一区中文字幕| 美女一区网站| 国产综合 伊人色| 亚洲六月丁香色婷婷综合久久| 人人草在线视频| 国产精品免费一区二区三区观看 | 色棕色天天综合网| 日本中文字幕在线视频观看| 欧美久久久久中文字幕| 国产在线观看91一区二区三区 | 欧美激情视频给我| 紧缚捆绑精品一区二区| 可以在线观看的av网站| 欧美在线视频免费| 久久综合视频网| jizz内谢中国亚洲jizz| 欧美日韩一区综合| 91成人免费在线视频| 精品无人区麻豆乱码久久久| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 亚洲第一级黄色片| 国产精品一二| 黄色小视频在线免费观看| 欧美一级高清免费播放| 久久久久久久久久久久久夜| 欧美gay视频| 日韩视频一二三| 精品中文视频在线| 日韩av在线发布| 黄网站在线播放| 亚洲自拍欧美色图| 欧美日韩在线影院| 欧美在线资源| 经典三级在线| 成人av蜜桃| 欧美三片在线视频观看| 韩日欧美一区| 免费黄网站在线观看| 亚洲r级在线观看| 狠狠干狠狠久久| 女人天堂亚洲aⅴ在线观看| 天堂在线免费av| 成人在线资源网址| 欧美日韩国产精品自在自线| 国产欧美大片| 日韩123区| 日韩最新中文字幕| 亚洲天堂一区二区三区| 成人av在线影院| 国产66精品| 一本色道久久加勒比88综合| 国产中文欧美精品| 欧美三级视频在线播放| 亚洲欧美激情诱惑| 电影在线观看一区| 国产高清av在线播放| 欧美老少做受xxxx高潮| 一色屋精品亚洲香蕉网站| 国产91久久精品一区二区| 在线观看视频污| 狼狼综合久久久久综合网| 亚洲国产天堂久久综合| 成人h动漫精品一区二| 高清一区二区三区| 夜色福利资源站www国产在线视频| 99国产超薄肉色丝袜交足的后果 | 视频一区在线播放| 亚洲精品mv| 日韩肉感妇bbwbbwbbw| 国产精品自产拍在线观| 欧美色图一区二区三区| 日本伊人色综合网| 亚洲一区有码| 国产超碰精品在线观看| 欧美少妇一区| 麻豆乱码国产一区二区三区| 一区二区视频在线看| 午夜国产欧美理论在线播放 | 欧美一区二区福利视频| 国产精品18久久久久久久久 | 精品激情国产视频| 亚洲一区二区三区激情| 99视频精品| 亚洲欧美综合久久久久久v动漫| 日本19禁啪啪吃奶大尺度| 玛丽玛丽电影原版免费观看1977 | 一区二区三区伦理| 夫妻免费无码v看片| 国产日韩欧美自拍| 精品人伦一区二区色婷婷| 久久综合久久综合久久| 欧美阿v一级看视频| 97成人资源| 中文在线播放| 免费成人深夜夜行网站视频| 欧洲中文字幕国产精品| 亚洲精品一区二区在线观看| 91网址在线看| 中文在线不卡| 2023国产精华国产精品| 欧美69xxxx| 亚洲精品亚洲人成在线| 蜜桃伊人久久| 精品成人一区二区三区四区| 日韩在线视频在线| ww久久综合久中文字幕| 亚洲免费观看高清完整版在线观看| 91日韩久久| 自由的xxxx在线视频| 久久久美女毛片| 91黄色8090|