rocket
走在agile的小路上
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-55 評論-208 文章-0 trackbacks-0
dwr reverse-ajax 實例解析
在網上找了一個老外寫的dwr reverse-ajax的例子,自己把coding順序調整了一下希望可以對學習dwr reverse-ajax的朋友有所幫助
1、首先要下載dwr 2.0 地址
http://getahead.org/dwr/download
2、在web.xml中加入dwr的servlet和相關配置
<!--
dwr servlet
-->
<
servlet
>
<
servlet-name
>
dwr-invoker
</
servlet-name
>
<
display-name
>
DWR Servlet
</
display-name
>
<
servlet-class
>
uk.ltd.getahead.dwr.DWRServlet
</
servlet-class
>
<
init-param
>
<
param-name
>
debug
</
param-name
>
<
param-value
>
true
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
pollAndCometEnabled
</
param-name
>
<
param-value
>
true
</
param-value
>
</
init-param
>
<
load-on-startup
>
1
</
load-on-startup
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
dwr-invoker
</
servlet-name
>
<
url-pattern
>
/dwr/*
</
url-pattern
>
</
servlet-mapping
>
pollAndCometEnabled是指dwr 的reverse ajax是使用polling 和comet的方式,在這個例子中可以明顯地從頁面上看出來是用的polling+comet
附:關于reverse-ajax的實現有3種方式
polling 就是隔一段時間向服務器發送一request來檢查服務端是否有數據更新
comet 就是一個長http請求,在請求期間服務端可以向客戶端push數據,但是這種做法要求server和brower長期建立一個通信通道,而且效率很低
piggyback 就是服務端的更新數據都在排隊等待,等到下一次有請求過來,那么這些等待更新數據就伴隨這次請求一起發送到brower
有關更詳細的reverse-ajax技術介紹可以參考
http://getahead.org/dwr/reverse-ajax
3、創建一個dwr.xml,用于配置你要制定的java代碼映射類,以及允許使用的方法和converter
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd"
>
<
dwr
>
<
allow
>
<
create
creator
="new"
javascript
="DWRHelper"
>
<
param
name
="class"
value
="com.cloverworxs.uma.helper.DWRHelper"
/>
<
include
method
="addMessage"
/>
</
create
>
<
convert
converter
="bean"
match
="com.cloverworxs.uma.helper.Message"
>
<
param
name
="include"
value
="id,text"
/>
</
convert
>
</
allow
>
</
dwr
>
create是只一個java的js映射,其中include是可以在js使用的方法
convert 是指對應js到java,或者java到js的對象轉換,其中include是可以轉換的屬性
4、寫服務段的java代碼
DWRHelper
package
com.cloverworxs.uma.helper;
import
java.util.ArrayList;
import
java.util.Collection;
import
java.util.Iterator;
import
java.util.LinkedHashMap;
import
java.util.LinkedList;
import
java.util.List;
import
java.util.Map;
import
org.directwebremoting.ScriptBuffer;
import
org.directwebremoting.WebContext;
import
org.directwebremoting.WebContextFactory;
import
org.directwebremoting.proxy.dwr.Util;
public
class
DWRHelper
{
public
void
addMessage(String text)
{
LinkedList messages
=
new
LinkedList();
if
(text
!=
null
&&
text.trim().length()
>
0
)
{
messages.addFirst(
new
Message(text));
while
(messages.size()
>
10
)
{
messages.removeLast();
}
}
//
Reverse Ajax code to be added here shortly
WebContext wctx
=
WebContextFactory.get();
String currentPage
=
wctx.getCurrentPage();
//
Clear the input box in the browser that kicked off this page only
Util utilThis
=
new
Util(wctx.getScriptSession());
utilThis.setValue(
"
text
"
,
""
);
//
For all the browsers on the current page:
Collection sessions
=
wctx.getScriptSessionsByPage(currentPage);
Util utilAll
=
new
Util(sessions);
//
Clear the list and add in the new set of messages
utilAll.removeAllOptions(
"
chatlog
"
);
utilAll.addOptions(
"
chatlog
"
, messages,
"
text
"
);
}
}
Message
package
com.cloverworxs.uma.helper;
import
org.directwebremoting.Security;
public
class
Message
{
public
Message(String newtext)
{
text
=
newtext;
if
(text.length()
>
256
)
{
text
=
text.substring(
0
,
256
);
}
text
=
Security.replaceXmlCharacters(text);
}
public
long
getId()
{
return
id;
}
public
String getText()
{
return
text;
}
private
long
id
=
System.currentTimeMillis();
private
String text;
}
5、到此為止可以寫頁面代碼了,下面的代碼html或者jsp都可以
<
h1
>
Java Chat
</
h1
>
<
body
onload
="dwr.engine.setActiveReverseAjax(true);"
>
<
script
type
='text/javascript'
src
='/sperc/dwr/interface/DWRHelper.js'
></
script
>
<
script
type
='text/javascript'
src
='/sperc/dwr/engine.js'
></
script
>
<
script
type
='text/javascript'
src
='/sperc/dwr/util.js'
></
script
>
<
p
>
This is a very simple chat demo that uses reverse ajax to collect messages and server-side browser manipulation to update the pages with the results.
</
p
>
<
p
>
Your Message:
<
input
id
="text"
onkeypress
="dwr.util.onReturn(event, sendMessage)"
/>
<
input
type
="button"
value
="Send"
onclick
="sendMessage()"
/></
p
>
<
script
type
="text/javascript"
>
function
sendMessage()
{
alert(dwr.util.getValue(
"
text
"
));
DWRHelper.addMessage(dwr.util.getValue(
"
text
"
));
}
</
script
>
<
hr
/>
<
ul
id
="chatlog"
style
="list-style-type:none;"
>
</
ul
>
</
body
>
頁面代碼簡單吧,只有方法調用,沒有任何獲得返回數據,和對回傳數據處理的代碼
注意:
<
body
onload
="dwr.engine.setActiveReverseAjax(true);"
>
這個是要在使用reverse-ajax的頁面必須的!
現在可以啟動應用體檢一把reverse-ajax,希望你能和我有一樣的驚奇感覺
當然,肯定有人會說這種功能用普通的ajax也可以實現啊,為什么要用reverse-ajax
這時候你就要考慮這種情況了,有用戶A和用戶B同時在發Message,A正在看message沒有任何request動作,而B發了一條新message,這時要求這個信息要展現給A看,那么普通的ajax可以處理這種功能嗎?這就是reverse-ajax的用途,可以從服務段向brower下推信息
posted on 2007-05-19 14:48
rocket
閱讀(6603)
評論(11)
編輯
收藏
評論:
#
re: dwr reverse-ajax 實例解析 2007-06-02 17:24 |
sunflower
公司里有些領導一味追求速度,不讓搞設計.
不肯接受新東西,也不讓我們年輕人使用新東西.
獨斷專行.
呵呵,rocket當初走的時候不會因為這個吧.^-^
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2007-06-02 17:26 |
sunflower
還是喜歡fred和phil那些不擺架子的前輩的.
^-^
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2007-08-10 15:53 |
thlzjfe
我怎么看著效果不明顯啊?必須點擊是才能談出個提示框,事件 onkeypress 的作用是什么啊,效果有是如何.請回復,謝謝!
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2007-08-11 14:46 |
rocket
你覺得效果不明顯是因為單機操作 可以試想一下這樣一種情況,兩個同時在線的用戶,A用戶有了操作之后,系統判斷會對另外B用戶造成影響,那么就可以使用reverse-ajax的方式在不刷新頁面的情況下把信息推給B用戶
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2007-09-19 09:25 |
yorry
關鍵在于DWRHelper把msg推給了所有的客戶端。
謝謝博主分享。
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2008-03-07 09:43 |
niejun
謝謝分享,確實很驚訝
回復
更多評論
#
re: dwr reverse-ajax 實例解析[未登錄] 2008-08-27 14:02 |
kim
非常感謝這個教程。試過了,效果不錯。
在用http://***/ ,在IE,Firefox訪問都沒有問題,
但是https://***/ , IE就一點反應都沒有了。Firefox沒有問題。
請問知道什么問題嗎?謝謝啊
回復
更多評論
#
re: dwr reverse-ajax 實例解析[未登錄] 2008-12-04 10:05 |
cc
為什么報錯說找不到dwr
回復
更多評論
#
re: dwr reverse-ajax 實例解析[未登錄] 2008-12-04 10:24 |
cc
<body onload="dwr.engine.setActiveReverseAjax(true);">可能就是這個dwr找不到
回復
更多評論
#
re: dwr reverse-ajax 實例解析 2009-04-26 14:58 |
longrui
您好:
LinkedList messages = new LinkedList();
的位置寫錯了,寫在方法里在每次調用方法時都會實例一個新的list,那后面儲存10條的步驟也就變得沒有意義了。
回復
更多評論
#
re: dwr reverse-ajax 實例解析
2009-10-29 16:31 |
benson
我的會一直出現
嚴重的: Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@107ebe1
uk.ltd.getahead.dwr.DWRServlet
java.lang.ClassNotFoundException: uk.ltd.getahead.dwr.DWRServlet
我有看dwr.jar 裡的確實有 uk.ltd.getahead.dwr.DWRServlet
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Dict.CN 在線詞典, 英語學習, 在線翻譯
QQ:19794405
agilelife分享群:59765983
QQ上少了,請大家加入msn group:
agilelife@groups.msn.com
敏捷項目實踐經驗分享
TDD,重構,迭代,結對
<
2008年12月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(7)
給我留言
查看公開留言
查看私人留言
我參與的團隊
深圳Java俱樂部(0/0)
隨筆分類
(15)
UI相關
好文翻譯(1)
常用框架(1)
敏捷方法(4)
數據庫相關
構架設計(2)
經驗積累(3)
項目管理(4)
隨筆檔案
(55)
2008年12月 (1)
2008年7月 (2)
2008年5月 (8)
2008年3月 (1)
2008年2月 (4)
2007年10月 (1)
2007年9月 (4)
2007年7月 (3)
2007年5月 (2)
2007年4月 (6)
2007年3月 (5)
2007年2月 (2)
2007年1月 (3)
2006年11月 (3)
2006年10月 (1)
2006年8月 (1)
2006年7月 (1)
2006年5月 (2)
2006年4月 (2)
2006年3月 (3)
相冊
rocket
搜索
積分與排名
積分 - 133236
排名 - 464
最新評論
1.?re: 找了一天的jsp格式化工具,最后還是用回workshop
nb@2
--3
2.?re: 一個以前沒有注意的問題:java構造函數的執行順序
不錯,很有幫助
--王鵬飛
3.?re: 一個新java web項目入手過程總結
標記一下。
--何楊
4.?re: 單元測試究竟是測試什么?[未登錄]
單元測試是在測邏輯,包括條件判定,循環等。博主的這段代碼不包括任何邏輯,當然不需要用單元測試去覆蓋。
--王輝
5.?re: 找了一天的jsp格式化工具,最后還是用回workshop
傻逼
--2
閱讀排行榜
1.?一個新java web項目入手過程總結(8499)
2.?一個以前沒有注意的問題:java構造函數的執行順序(8198)
3.?找了一天的jsp格式化工具,最后還是用回workshop(7382)
4.?dwr reverse-ajax 實例解析(6603)
5.?Spring+hibernate 單元測試框架總結(6239)
評論排行榜
1.?不仁義,不仗義(24)
2.?招聘java程序員,系統架構師(20)
3.?dwr reverse-ajax 實例解析(11)
4.?找了一天的jsp格式化工具,最后還是用回workshop(10)
5.?單元測試究竟是測試什么?(10)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 rocket
主站蜘蛛池模板:
久久久久久久尹人综合网亚洲
|
99re6在线视频精品免费
|
国产在线观看免费视频播放器
|
亚洲国产视频一区
|
成人毛片18女人毛片免费视频未
|
亚洲AV综合色区无码二区爱AV
|
四虎影视永久免费观看地址
|
花蝴蝶免费视频在线观看高清版
|
亚洲人成片在线观看
|
www.亚洲色图.com
|
免费A级毛片av无码
|
亚洲AV色无码乱码在线观看
|
亚洲国产精品SSS在线观看AV
|
免费无码一区二区三区蜜桃大
|
国产亚洲一区二区手机在线观看
|
免费三级毛片电影片
|
一级毛片**免费看试看20分钟
|
亚洲欧洲国产精品久久
|
又粗又硬免费毛片
|
免费v片在线观看视频网站
|
无人视频在线观看免费播放影院
|
亚洲综合色丁香麻豆
|
亚洲美女在线国产
|
久久久久国色AV免费看图片
|
中文字幕免费在线播放
|
亚洲精品国产摄像头
|
67pao强力打造67194在线午夜亚洲
|
亚洲?v无码国产在丝袜线观看
|
亚洲精品免费在线
|
亚洲色精品三区二区一区
|
四虎影在线永久免费观看
|
91免费在线播放
|
13小箩利洗澡无码视频网站免费
|
日本亚洲中午字幕乱码
|
97在线免费视频
|
美女视频黄频a免费大全视频
|
亚洲国产另类久久久精品黑人
|
免费亚洲视频在线观看
|
国产精品成人免费视频网站京东
|
日日麻批免费40分钟无码
|
国产精品成人啪精品视频免费
|