rocket
走在agile的小路上
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆-55 評(píng)論-208 文章-0 trackbacks-0
dwr reverse-ajax 實(shí)例解析
在網(wǎng)上找了一個(gè)老外寫的dwr reverse-ajax的例子,自己把coding順序調(diào)整了一下希望可以對(duì)學(xué)習(xí)dwr reverse-ajax的朋友有所幫助
1、首先要下載dwr 2.0 地址
http://getahead.org/dwr/download
2、在web.xml中加入dwr的servlet和相關(guān)配置
<!--
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的方式,在這個(gè)例子中可以明顯地從頁面上看出來是用的polling+comet
附:關(guān)于reverse-ajax的實(shí)現(xiàn)有3種方式
polling 就是隔一段時(shí)間向服務(wù)器發(fā)送一request來檢查服務(wù)端是否有數(shù)據(jù)更新
comet 就是一個(gè)長http請(qǐng)求,在請(qǐng)求期間服務(wù)端可以向客戶端push數(shù)據(jù),但是這種做法要求server和brower長期建立一個(gè)通信通道,而且效率很低
piggyback 就是服務(wù)端的更新數(shù)據(jù)都在排隊(duì)等待,等到下一次有請(qǐng)求過來,那么這些等待更新數(shù)據(jù)就伴隨這次請(qǐng)求一起發(fā)送到brower
有關(guān)更詳細(xì)的reverse-ajax技術(shù)介紹可以參考
http://getahead.org/dwr/reverse-ajax
3、創(chuàng)建一個(gè)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是只一個(gè)java的js映射,其中include是可以在js使用的方法
convert 是指對(duì)應(yīng)js到j(luò)ava,或者java到j(luò)s的對(duì)象轉(zhuǎn)換,其中include是可以轉(zhuǎn)換的屬性
4、寫服務(wù)段的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
>
頁面代碼簡單吧,只有方法調(diào)用,沒有任何獲得返回?cái)?shù)據(jù),和對(duì)回傳數(shù)據(jù)處理的代碼
注意:
<
body
onload
="dwr.engine.setActiveReverseAjax(true);"
>
這個(gè)是要在使用reverse-ajax的頁面必須的!
現(xiàn)在可以啟動(dòng)應(yīng)用體檢一把reverse-ajax,希望你能和我有一樣的驚奇感覺
當(dāng)然,肯定有人會(huì)說這種功能用普通的ajax也可以實(shí)現(xiàn)啊,為什么要用reverse-ajax
這時(shí)候你就要考慮這種情況了,有用戶A和用戶B同時(shí)在發(fā)Message,A正在看message沒有任何request動(dòng)作,而B發(fā)了一條新message,這時(shí)要求這個(gè)信息要展現(xiàn)給A看,那么普通的ajax可以處理這種功能嗎?這就是reverse-ajax的用途,可以從服務(wù)段向brower下推信息
posted on 2007-05-19 14:48
rocket
閱讀(6605)
評(píng)論(11)
編輯
收藏
評(píng)論:
#
re: dwr reverse-ajax 實(shí)例解析 2007-06-02 17:24 |
sunflower
公司里有些領(lǐng)導(dǎo)一味追求速度,不讓搞設(shè)計(jì).
不肯接受新東西,也不讓我們年輕人使用新東西.
獨(dú)斷專行.
呵呵,rocket當(dāng)初走的時(shí)候不會(huì)因?yàn)檫@個(gè)吧.^-^
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2007-06-02 17:26 |
sunflower
還是喜歡fred和phil那些不擺架子的前輩的.
^-^
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2007-08-10 15:53 |
thlzjfe
我怎么看著效果不明顯啊?必須點(diǎn)擊是才能談出個(gè)提示框,事件 onkeypress 的作用是什么啊,效果有是如何.請(qǐng)回復(fù),謝謝!
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2007-08-11 14:46 |
rocket
你覺得效果不明顯是因?yàn)閱螜C(jī)操作 可以試想一下這樣一種情況,兩個(gè)同時(shí)在線的用戶,A用戶有了操作之后,系統(tǒng)判斷會(huì)對(duì)另外B用戶造成影響,那么就可以使用reverse-ajax的方式在不刷新頁面的情況下把信息推給B用戶
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2007-09-19 09:25 |
yorry
關(guān)鍵在于DWRHelper把msg推給了所有的客戶端。
謝謝博主分享。
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2008-03-07 09:43 |
niejun
謝謝分享,確實(shí)很驚訝
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析[未登錄] 2008-08-27 14:02 |
kim
非常感謝這個(gè)教程。試過了,效果不錯(cuò)。
在用http://***/ ,在IE,Firefox訪問都沒有問題,
但是https://***/ , IE就一點(diǎn)反應(yīng)都沒有了。Firefox沒有問題。
請(qǐng)問知道什么問題嗎?謝謝啊
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析[未登錄] 2008-12-04 10:05 |
cc
為什么報(bào)錯(cuò)說找不到dwr
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析[未登錄] 2008-12-04 10:24 |
cc
<body onload="dwr.engine.setActiveReverseAjax(true);">可能就是這個(gè)dwr找不到
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析 2009-04-26 14:58 |
longrui
您好:
LinkedList messages = new LinkedList();
的位置寫錯(cuò)了,寫在方法里在每次調(diào)用方法時(shí)都會(huì)實(shí)例一個(gè)新的list,那后面儲(chǔ)存10條的步驟也就變得沒有意義了。
回復(fù)
更多評(píng)論
#
re: dwr reverse-ajax 實(shí)例解析
2009-10-29 16:31 |
benson
我的會(huì)一直出現(xiàn)
嚴(yán)重的: 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 裡的確實(shí)有 uk.ltd.getahead.dwr.DWRServlet
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯
QQ:19794405
agilelife分享群:59765983
QQ上少了,請(qǐng)大家加入msn group:
agilelife@groups.msn.com
敏捷項(xiàng)目實(shí)踐經(jīng)驗(yàn)分享
TDD,重構(gòu),迭代,結(jié)對(duì)
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(7)
給我留言
查看公開留言
查看私人留言
我參與的團(tuán)隊(duì)
深圳Java俱樂部(0/0)
隨筆分類
(15)
UI相關(guān)
好文翻譯(1)
常用框架(1)
敏捷方法(4)
數(shù)據(jù)庫相關(guān)
構(gòu)架設(shè)計(jì)(2)
經(jīng)驗(yàn)積累(3)
項(xiàng)目管理(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)
相冊(cè)
rocket
搜索
積分與排名
積分 - 133256
排名 - 464
最新評(píng)論
1.?re: 找了一天的jsp格式化工具,最后還是用回workshop
nb@2
--3
2.?re: 一個(gè)以前沒有注意的問題:java構(gòu)造函數(shù)的執(zhí)行順序
不錯(cuò),很有幫助
--王鵬飛
3.?re: 一個(gè)新java web項(xiàng)目入手過程總結(jié)
標(biāo)記一下。
--何楊
4.?re: 單元測(cè)試究竟是測(cè)試什么?[未登錄]
單元測(cè)試是在測(cè)邏輯,包括條件判定,循環(huán)等。博主的這段代碼不包括任何邏輯,當(dāng)然不需要用單元測(cè)試去覆蓋。
--王輝
5.?re: 找了一天的jsp格式化工具,最后還是用回workshop
傻逼
--2
閱讀排行榜
1.?一個(gè)新java web項(xiàng)目入手過程總結(jié)(8500)
2.?一個(gè)以前沒有注意的問題:java構(gòu)造函數(shù)的執(zhí)行順序(8198)
3.?找了一天的jsp格式化工具,最后還是用回workshop(7383)
4.?dwr reverse-ajax 實(shí)例解析(6605)
5.?Spring+hibernate 單元測(cè)試框架總結(jié)(6239)
評(píng)論排行榜
1.?不仁義,不仗義(24)
2.?招聘java程序員,系統(tǒng)架構(gòu)師(20)
3.?dwr reverse-ajax 實(shí)例解析(11)
4.?找了一天的jsp格式化工具,最后還是用回workshop(10)
5.?單元測(cè)試究竟是測(cè)試什么?(10)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 rocket
主站蜘蛛池模板:
亚洲日韩一区二区三区
|
亚洲一区精品伊人久久伊人
|
亚洲成在人天堂一区二区
|
亚洲精品视频在线看
|
亚洲av片一区二区三区
|
亚洲?V无码成人精品区日韩
|
国产在线98福利播放视频免费
|
日韩在线a视频免费播放
|
免费看大黄高清网站视频在线
|
日韩在线a视频免费播放
|
免费大黄网站在线观
|
亚洲国产精品一区二区第四页
|
亚洲中文字幕伊人久久无码
|
亚洲色婷婷一区二区三区
|
国产亚洲av片在线观看播放
|
久久精品国产亚洲AV网站
|
精品亚洲成a人片在线观看少妇
|
亚洲国产精品久久网午夜
|
亚洲人精品亚洲人成在线
|
亚洲av无码专区亚洲av不卡
|
无遮挡a级毛片免费看
|
在线观看人成视频免费无遮挡
|
好久久免费视频高清
|
国内精自视频品线六区免费
|
免费a级毛片高清视频不卡
|
色吊丝永久在线观看最新免费
|
亚洲av手机在线观看
|
亚洲精品无码久久久久去q
|
久久水蜜桃亚洲av无码精品麻豆
|
亚洲av极品无码专区在线观看
|
亚洲成av人片天堂网无码】
|
九九免费精品视频在这里
|
男人j进入女人j内部免费网站
|
www视频在线观看免费
|
日本免费网站观看
|
好看的电影网站亚洲一区
|
亚洲婷婷综合色高清在线
|
国产成人精品亚洲
|
国产在线精品免费aaa片
|
久久精品免费一区二区喷潮
|
男人的天堂亚洲一区二区三区
|