




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
使用Pushlet來實現(xiàn)服務器端向客戶端推送信息1. 實現(xiàn)方式:有兩種實現(xiàn)方式:1. 通過配置文件來實現(xiàn)定時的從服務器端向客戶端推送信息2. 通過API主動向另外一端推送信息以下分別給予介紹。2. 特別注意在開始測試之前,有兩點非常重要,需要實現(xiàn)講明,否則程序?qū)o法正常運行:2.1. JSP頁面上的設定JSP頁面上必須添加以下代碼以確保Pushlet能夠正確的獲得后臺服務的地址:base href=2.2. Pushlet的JS文件的Bug修改需要修改被引用的JS文件ajax-pushlet-client.js的內(nèi)容,找到PL.pushletURL = PL._getWebRoot() + pushlet.srv;將其修改為PL.pushletURL = pushlet.srv;修改的原因是Pushlet進行地址解析的方法在某些應用中會解析錯誤,導致請求的路徑是nullpushlet.srv?,最終導致無法正確的請求到服務器的信息。2.3. 中文問題一般情況下,如果不做特殊處理,中文問題將會導致Pushlet的客戶端停止響應,解決辦法是,在使用Pushlet的客戶端代碼發(fā)送消息之前,將其進行轉碼,代碼為encodeURIComponent( msg)3. 正式開始以上準備工作完畢,就可以正式的開發(fā)測試樣例了。3.1. 定時的從后臺向前臺push信息(1) 在eclipse中創(chuàng)建一個動態(tài)的web工程(2) 配置及庫文件文件:從/ 下載最新的pushlet的開發(fā)包,將其中的以下文件按照描述進行設定序號文件名源位置目標位置備注1.pushlet.jarpushlet-2.0.4lib項目類路徑如果使用的是applet的話,還需要將pushletclient.jar設置到項目的類路徑中去2.pertiespushlet-2.0.4webappspushletWEB-INFclasses項目的src根路徑注意稍后需要修改perties,其他兩個文件的內(nèi)容不需要修改3.ajax-pushlet-client.jspushlet-2.0.4webappspushletlib項目的webrootlib需要按照之前的描述修改其中的內(nèi)容(3) 修改web.xml,將pushlet的自啟動servlet添加進去 pushlet nl.justobjects.pushlet.servlet.Pushlet 1 pushlet /pushlet.srv (4) 創(chuàng)建服務器端代碼,特別注意類和內(nèi)部靜態(tài)類的名字/* * */package com.guoguo;import java.io.Serializable;import java.io.UnsupportedEncodingException;import sun.rmi.runtime.Log;import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.EventPullSource;/* * author QIAGUO * */public class HelloWorldPushlet implements Serializable /* * */private static final long serialVersionUID = -8940934044114406724L;public static class HWPushlet extends EventPullSource Log log = Log.getLog(HWPushlet.class.getName(),HWPushlet.class.getName(), true);/* * (non-Javadoc) * * see nl.justobjects.pushlet.core.EventPullSource#getSleepTime() */Overrideprotected long getSleepTime() return 1000;/每一秒鐘自動執(zhí)行一次/* * (non-Javadoc) * * see nl.justobjects.pushlet.core.EventPullSource#pullEvent() */Overrideprotected Event pullEvent() /注意,一下是設定消息的主題/guoguo/helloworld,號稱主題是可以繼承的 /但是筆者的測試是失敗的,也許方法不對,呵呵Event event = Event.createDataEvent(/guoguo/helloworld);String data= hello,world 郭強 +System.currentTimeMillis();try data=new String(data.getBytes(UTF-8),ISO-8859-1); catch (UnsupportedEncodingException e) e.printStackTrace();event.setField(hw,data);return event;(5) 注冊服務器端代碼為事件源,在perties文件中,添加以下行source7=com.guoguo.HelloWorldPushlet$HWPushlet以上方式適用于有內(nèi)部類的情況,如果沒有內(nèi)部類的話,使用以下的方式進行注冊(這時外部類必須繼承父類EventPullSource)source7=com.guoguo.HelloWorldPushlet(6) 頁面(可以參考頁面內(nèi)注釋信息)Pushlet Test base href= /初始化pushlet客戶端PL._init(); /設定運行時顯示調(diào)試信息,不需要時,直接刪掉即可PL.setDebug(true); /設定監(jiān)聽主題:/guoguo/helloworld,與服務器端的主題完全一致PL.joinListen(/guoguo/helloworld); /接收到事件后,顯示服務器信息function onData(event) guoguo.innerText=(event.get(hw);Pushlet Test(7) 啟動服務器,即可看到頁面上的信息每秒鐘一次,進行定時的更新3.2. 主動控制發(fā)送消息3.2.1. 有刷新的提交信息(服務器端主動發(fā)送消息)(1) 創(chuàng)建一個servlet,并且注冊到web.xml中Servlet代碼package com.guoguo;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import nl.justobjects.pushlet.core.Dispatcher;import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.SessionManager;/* * Servlet implementation class ChatServlet */public class ChatServlet extends HttpServlet private static final long serialVersionUID = 1L;/* * see HttpServlet#HttpServlet() */public ChatServlet() super();/* * see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException / myUnicast();myMulticast();/ myBroadcast();request.getRequestDispatcher(chat.jsp).forward(request, response);private void myUnicast() Event event = Event.createDataEvent(/guoguo/myevent1);event.setField(key1, Unicast msg);Dispatcher.getInstance().unicast(event, piero); / 向ID為piero的用戶推送System.out.println(success.);private void myMulticast() Event event = Event.createDataEvent(/guoguo/myevent1);/Event event = Event.createDataEvent(/guoguo);event.setField(key1, Multicast msg);Dispatcher.getInstance().multicast(event); / 向所有和myevent1名稱匹配的事件推送System.out.println(wa success.);private void myBroadcast() Event event = Event.createDataEvent(/guoguo/myevent1); / 向所有的事件推送,不要求和這兒的myevent1名稱匹配event.setField(key1, Broadcast msg);Dispatcher.getInstance().broadcast(event);System.out.println(asw success.);Web.xml ChatServlet ChatServlet com.guoguo.ChatServlet ChatServlet /ChatServlet (2) 頁面端代碼發(fā)送端base href=form action=/ChatServlet接收端base href=PL._init();PL.joinListen(/guoguo/myevent1);function onData(event) guoguo.innerText = (event.get(key1);啟動服務器,從發(fā)送端提交信息,內(nèi)容會在接收端顯示出來3.2.2. 無刷新的提交信息(從客戶端發(fā)送消息)發(fā)送端base hr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年江蘇省宿遷市泗洪縣部分事業(yè)單位公開招聘筆試歷年典型考題及考點剖析附帶答案詳解-1
- 2025至2031年中國流水號不干膠標簽行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國水上式底閥管道彎頭行業(yè)投資前景及策略咨詢研究報告
- 老年精神科護理
- 精神科病房常用藥物科普指南
- 護理專業(yè)大學教育體系
- 機器人工程師培訓行業(yè)深度調(diào)研及發(fā)展項目商業(yè)計劃書
- 2025至2031年中國復合玻璃鋼保溫護套行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國圣誕網(wǎng)燈行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國吹塑薄膜筒料行業(yè)投資前景及策略咨詢研究報告
- 江蘇省淮安市淮陰區(qū)淮陰中學2025屆高一下生物期末質(zhì)量檢測試題含解析
- 2024屆江蘇省淮安市數(shù)學高一下期末考試試題含解析
- 2024年安徽六安裕安投資集團裕安融資擔保有限公司招聘筆試參考題庫含答案解析
- MOOC 化工原理(下冊)-大連理工大學 中國大學慕課答案
- 公共政策導論全套教學課件
- 車間統(tǒng)計員培訓課件
- 平臺印刷機-機械原理課程設計報告
- 項目技術經(jīng)濟分析報告
- 《動物解剖學》課件
- 2024屆龍巖市五縣八年級物理第二學期期末考試試題含解析
- 牙齒異位種植體植入后的骨重建研究
評論
0/150
提交評論