DWR2.0.x的推技術以推發送消息,適用於ChatRoom,股票信息顯示等場景,優於現在JS定時輪詢服務端的策略,大大節省服務端的資源(數據無變化時不需要應答客戶端的定時查詢)。
在2.0M3開始終於能夠正常運作。(注意,2.0M3需要到http://dwr.dev.java.net下載)
推技術的經典範例是DWR Examples裏的ChatRoom,另外SpringSide裏的場景也非常實在。
1. 推消息的接收頁
1.<script type='text/javascript' src='<c:url value="/dwr/engine.js"/>'></script>
<script type='text/javascript' src='<c:url value="/dwr/interface/orderNotice.js"/>'></script>
<script type='text/javascript' src='<c:url value="/dwr/util.js"/>'></script>
2.<script language="javascript">
function receiveMessages(id) {
$('orderNotice').innerHTML = "收到id爲" + id + "的新訂單!";
$('orderNotice').show();
}
</script>
3.<body οnlοad="DWREngine.setReverseAjax(true);">
<div id="orderNotice"/>
第一,引入dwr及那個負責執行推操作的Java類(OrderNotice)的js
第二,設定任意的接收推信息的js函數
第三,在body的onload裏設定ReverseAjax=true,開始偵聽信息
詳見springside-bookstore/webapp/admin/top.jsp
2.負責推送消息的Java類
public class OrderNotice {
public void noticeNewOrder(int id) {
WebContext wctx = WebContextFactory.get();
ScriptBuffer script = new ScriptBuffer();
script.appendScript("receiveMessages(")
.appendData(id)
.appendScript(");"); ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/springside/admin/top.jsp");
for (ScriptSession session : pages) {
session.addScript(script);
}
}
}可見,用ScriptBuffer構造一段在客戶端執行的SQL,然後使用WebContext ,ServerContext 定位需要發送的session進行發送。注意這裏HardCode了URL路徑來確定Subscriber,也可以像ChatRoom裏面那樣,用currenpage 發給與orderNotice的調用者發起者在同一頁的session。
3.其餘工作
設定dwr.xml,按Dwr的老模式,從客戶端調用OrderNotice。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cxhzqhzq/archive/2008/07/07/2621081.aspx