在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式。
@H_301_6@
1.服务器推送技术和DWR的推送方式
(3)polling方式由浏览器定时向服务端发送ajax请求,询问后台是否有什么内容需要推送,有的话就会由服务端返回推送内容。这种方式和我们直接在页面通过定时器发送ajax请求,然后查询后台是否有变化内容的实现是类似的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@H_779_403@
24
25
26
27
28
29
|
package
sugar.dwr;
import
java.util.Collection;
org.directwebremoting.Browser;
org.directwebremoting.ScriptBuffer;
org.directwebremoting.ScriptSession;
public
class
MessagePush {
void
send(
final
String content){
Runnable run =
new
Runnable(){
private
ScriptBuffer script =
ScriptBuffer();
run() {
//设置要调用的 js及参数
script.appendCall(
"show"
,content);
//得到所有ScriptSession
Collection<ScriptSession> sessions = Browser.getTargetSessions();
//遍历每一个ScriptSession
for
(ScriptSession scriptSession : sessions){
scriptSession.addScript( script);
}
}
};
//执行推送
Browser. withAllSessions(run);
}
}
|
<%@ page language= "java" import ="java.util.*" pageEncoding="UTF-8" %>
<!
DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
html
>
head
>
title
>dwr接收</
>
script
src
=
"js/jquery-1.8.3.js"
></
script
>
type
"text/javascript"
"dwr/util.js"
>
"dwr/engine.js"
>
"dwr/interface/messagePush.js"
>
</
>
body
>
dwr接收<
br
/>
div
id
"content"
style
" width: 200px ;height: 30px;border : 1px solid ; text-align: center ; padding: 5px;"
div
>
"text/javascript"
>
dwr.engine.setActiveReverseAjax( true);
dwr.engine.setNotifyServerOnPageUnload( true);
function show(content){
$( "#content" ).text(content);
}
>
>
>
|
DWR3.0可以通过
//执行推送 Browser.withAllSessionsFiltered(filter,run); //注意这里调用了有filter功能的方法2.通过参数可知我们需要一个 ScriptSessionFilter对象,此时send的方法改写成如下:
<script type= "text/javascript"> //这个方法用来启动该页面的ReverseAjax功能 dwr.engine.setActiveReverseAjax( true); //设置在页面关闭时,通知服务端销毁会话 dwr.engine.setNotifyServerOnPageUnload( true); var tag = "receiverTag"; //自定义一个标签 messagePush.onPageLoad(tag); //这个函数是提供给后台推送的时候 调用的 function show(content){ $( "#content").text(content); } </script >这样我们可以给不同客户端的jsp中导入不同的tag值,过滤推送的客户端 原文链接:https://www.f2er.com/ajax/163796.html