




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
使用Pushlet來(lái)實(shí)現(xiàn)服務(wù)器端向客戶端推送信息1. 實(shí)現(xiàn)方式:有兩種實(shí)現(xiàn)方式:1. 通過(guò)配置文件來(lái)實(shí)現(xiàn)定時(shí)的從服務(wù)器端向客戶端推送信息2. 通過(guò)API主動(dòng)向另外一端推送信息以下分別給予介紹。2. 特別注意在開(kāi)始測(cè)試之前,有兩點(diǎn)非常重要,需要實(shí)現(xiàn)講明,否則程序?qū)?huì)無(wú)法正常運(yùn)行:2.1. JSP頁(yè)面上的設(shè)定JSP頁(yè)面上必須添加以下代碼以確保Pushlet能夠正確的獲得后臺(tái)服務(wù)的地址: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進(jìn)行地址解析的方法在某些應(yīng)用中會(huì)解析錯(cuò)誤,導(dǎo)致請(qǐng)求的路徑是nullpushlet.srv?,最終導(dǎo)致無(wú)法正確的請(qǐng)求到服務(wù)器的信息。2.3. 中文問(wèn)題一般情況下,如果不做特殊處理,中文問(wèn)題將會(huì)導(dǎo)致Pushlet的客戶端停止響應(yīng),解決辦法是,在使用Pushlet的客戶端代碼發(fā)送消息之前,將其進(jìn)行轉(zhuǎn)碼,代碼為encodeURIComponent( msg)3. 正式開(kāi)始以上準(zhǔn)備工作完畢,就可以正式的開(kāi)發(fā)測(cè)試樣例了。3.1. 定時(shí)的從后臺(tái)向前臺(tái)push信息(1) 在eclipse中創(chuàng)建一個(gè)動(dòng)態(tài)的web工程(2) 配置及庫(kù)文件文件:從/ 下載最新的pushlet的開(kāi)發(fā)包,將其中的以下文件按照描述進(jìn)行設(shè)定序號(hào)文件名源位置目標(biāo)位置備注1.pushlet.jarpushlet-2.0.4lib項(xiàng)目類路徑如果使用的是applet的話,還需要將pushletclient.jar設(shè)置到項(xiàng)目的類路徑中去2.pertiespushlet-2.0.4webappspushletWEB-INFclasses項(xiàng)目的src根路徑注意稍后需要修改perties,其他兩個(gè)文件的內(nèi)容不需要修改3.ajax-pushlet-client.jspushlet-2.0.4webappspushletlib項(xiàng)目的webrootlib需要按照之前的描述修改其中的內(nèi)容(3) 修改web.xml,將pushlet的自啟動(dòng)servlet添加進(jìn)去 pushlet nl.justobjects.pushlet.servlet.Pushlet 1 pushlet /pushlet.srv (4) 創(chuàng)建服務(wù)器端代碼,特別注意類和內(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;/每一秒鐘自動(dòng)執(zhí)行一次/* * (non-Javadoc) * * see nl.justobjects.pushlet.core.EventPullSource#pullEvent() */Overrideprotected Event pullEvent() /注意,一下是設(shè)定消息的主題/guoguo/helloworld,號(hào)稱主題是可以繼承的 /但是筆者的測(cè)試是失敗的,也許方法不對(duì),呵呵Event event = Event.createDataEvent(/guoguo/helloworld);String data= hello,world 郭強(qiáng) +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) 注冊(cè)服務(wù)器端代碼為事件源,在perties文件中,添加以下行source7=com.guoguo.HelloWorldPushlet$HWPushlet以上方式適用于有內(nèi)部類的情況,如果沒(méi)有內(nèi)部類的話,使用以下的方式進(jìn)行注冊(cè)(這時(shí)外部類必須繼承父類EventPullSource)source7=com.guoguo.HelloWorldPushlet(6) 頁(yè)面(可以參考頁(yè)面內(nèi)注釋信息)Pushlet Test base href= /初始化pushlet客戶端PL._init(); /設(shè)定運(yùn)行時(shí)顯示調(diào)試信息,不需要時(shí),直接刪掉即可PL.setDebug(true); /設(shè)定監(jiān)聽(tīng)主題:/guoguo/helloworld,與服務(wù)器端的主題完全一致PL.joinListen(/guoguo/helloworld); /接收到事件后,顯示服務(wù)器信息function onData(event) guoguo.innerText=(event.get(hw);Pushlet Test(7) 啟動(dòng)服務(wù)器,即可看到頁(yè)面上的信息每秒鐘一次,進(jìn)行定時(shí)的更新3.2. 主動(dòng)控制發(fā)送消息3.2.1. 有刷新的提交信息(服務(wù)器端主動(dòng)發(fā)送消息)(1) 創(chuàng)建一個(gè)servlet,并且注冊(cè)到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) 頁(yè)面端代碼發(fā)送端base href=form action=/ChatServlet接收端base href=PL._init();PL.joinListen(/guoguo/myevent1);function onData(event) guoguo.innerText = (event.get(key1);啟動(dòng)服務(wù)器,從發(fā)送端提交信息,內(nèi)容會(huì)在接收端顯示出來(lái)3.2.2. 無(wú)刷新的提交信息(從客戶端發(fā)送消息)發(fā)送端base hr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人飛機(jī)應(yīng)急定位發(fā)射器租賃飛行員生命保障服務(wù)協(xié)議
- 服裝鞋帽品牌代理合作協(xié)議(含市場(chǎng)調(diào)研)
- 物流倉(cāng)庫(kù)主管派遣與倉(cāng)儲(chǔ)物流安全管理合同
- 智能停車場(chǎng)車位預(yù)約與新能源汽車充電服務(wù)協(xié)議
- 資產(chǎn)管理公司資產(chǎn)評(píng)估師派遣合同
- 區(qū)塊鏈技術(shù)在智慧城市建設(shè)中的應(yīng)用培訓(xùn)協(xié)議
- 海外代購(gòu)商品售后服務(wù)保障協(xié)議
- 帶車位地下室住宅產(chǎn)權(quán)變更合同范本
- 高效口腔醫(yī)療器械滅菌袋專業(yè)采購(gòu)協(xié)議
- 災(zāi)害救援志愿者服務(wù)承諾及行動(dòng)協(xié)議
- 康復(fù)評(píng)定學(xué)第三章肌力
- 圖形創(chuàng)意(高職藝術(shù)設(shè)計(jì))PPT完整全套教學(xué)課件
- 2023年財(cái)會(huì)金融-注冊(cè)會(huì)計(jì)師-審計(jì)(官方)考試歷年真題甄選版帶答案
- 2023學(xué)年完整公開(kāi)課版粘壓阻力
- 基于STM32的平衡車系統(tǒng)設(shè)計(jì)
- YY/T 0299-2022醫(yī)用超聲耦合劑
- MT 181-1988煤礦井下用塑料管安全性能檢驗(yàn)規(guī)范
- GB/T 193-2003普通螺紋直徑與螺距系列
- 因納特工商管理綜合實(shí)訓(xùn)軟件V4.00
- 四議兩公開(kāi)工作法課件
- 2022年保山數(shù)字產(chǎn)業(yè)發(fā)展有限責(zé)任公司招聘筆試題庫(kù)及答案解析
評(píng)論
0/150
提交評(píng)論