dwr 发送给指定用户问题

wodehongseupan wodehongseupan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
dwr 发送给指定用户问题



本人按照网上的demo写了一个dwr给指定人员发送信息的程序,但奇怪的问题是在对比人员id的时候,即使id不相等的用户也会受到信息,纠结了好几天,还是没有解决。

代码部分:

1,java类
---------------------
public class Msg{

public void sendMsg(String userid,String message){
final String userId = userid;
final String autoMessage = message;
//过滤器
ScriptSessionFilter filter = new ScriptSessionFilter() {
public boolean match(ScriptSession scriptSession) {
String tag = (String)scriptSession.getAttribute("userId" );
System. out.println(tag);
System.out.println("userId.equals(tag)="+userId.equals(tag));
return userId.equals(tag);
}
};
Runnable run = new Runnable(){
private ScriptBuffer script = new ScriptBuffer();
public void run() {
//设置要调用的 js及参数
System.out.println("----------------run----------------");
script.appendCall( "showMessage", autoMessage);
//得到所有ScriptSession
Collection<ScriptSession> sessions = DWRScriptSessionListener.getScriptSessions();
//遍历每一个ScriptSession
for (ScriptSession scriptSession : sessions){
System.out.println("for (ScriptSession scriptSession : sessions)");
scriptSession.addScript( script);
}
}
};
//执行推送
System.out.println("--------推送开始--------");
Browser.withAllSessionsFiltered(filter, run); //注意这里调用了有filter功能的方法
System.out.println("--------推送结束--------");
}

public void saveid(String userId){
try{
// HttpServletRequest request = ServletActionContext.getRequest();
//request.getSession().setAttribute("userId", userId);
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute("userId", userId);
}catch(Exception e){
e.printStackTrace();
}
}

2,发送端
-----------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/SendMsg.js"></script>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
dwr.engine.setActiveReverseAjax(true);
dwr.engine.setNotifyServerOnPageUnload(true);
$("#but").click(function(){
SendMsg.sendMsg('11',$("#msg").val());
});
});

function showMessage(autoMessage){
$("#message").text(autoMessage);
}
</script>
<title>Insert title here</title>
</head>
<body>
<input type="text" id="msg" />
<input type="button" value="发送“ id="but" />
<div id="message" style="width: 200px;height: 200px;border: 1px solid red ; text-align: center; padding: 5px;"></div>
</body>
</html>


3,接收端
---------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%

String userId = request.getParameter("userId");
%>
<!DOCTYPE HTML>
<html>
<head>
<title>showMsg1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/SendMsg.js"></script>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
//表示允许使用推送技术
//这个方法用来启动该页面的ReverseAjax功能
dwr.engine.setActiveReverseAjax(true);
//设置在页面关闭时,通知服务端销毁会话
dwr.engine.setNotifyServerOnPageUnload(true);
});
//通过该方法与后台交互,确保推送时能找到指定用户
function onPageLoad(){
var userId = '<%=userId%>';
SendMsg.saveid(userId);
}
//推送信息
function showMessage(autoMessage){
$("#message").text(autoMessage);
}

</script>
<title>Insert title here</title>
</head>
<body onload="onPageLoad();">
<div id="message" style="width: 200px;height: 200px;border: 1px solid red ; text-align: center; padding: 5px;"></div>
</body>
</html>


注:接收端通过不同userId进行测试,发送端发送的userId是11


大家帮帮忙啊,项目紧,纠结了好几天了,快疯了!
...全文

相关推荐

使用DWR实时推送后台环境量和报警数据

DWR(逆向Ajax),Direct Web Remoting是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个 DWR Servlet以及 JavaScript库。它的实现是基于Ajax的,可实现无刷新的效果。这个框架最大的优点就是可以在JS中调用Java方法,传递参数,并且可以得到返回值

41摄氏度男

即时通讯DWR Reverse Ajax

即时通讯DWR Reverse Ajax

joshuawangzjie

java实现dwr消息精确指定用户推送

下载后直接导入myeclips 发布运行即可 访问http: localhost:8080 ijiami pro 一个登入页面 随便输入一个名字 登入后进入主页点击检测分析按钮 返回到其他页面 可以在页面进行其他操作 后台检测分析完后右下角就会消息提示通知你 检测结果 然后你可以打开多个浏览器 在登入输入相同的名字和不同的名字看看效果 ">下载后直接导入myeclips 发布运行即可 访问http: localhost:8080 ijiami pro 一个登入页面 随便输入一个名字 登入后进入主页点击检测分析按钮 返回到其他页面 可以在页面进行其他操作 后台检测分析完后右下角就会消息提 [更多]

牛逼的人干着牛逼的事

DWR用户保存

DWR+spring实现用户保存,只是关键代码,希望带你们有帮助

紫云流影

dwr验证注册用户

利用dwr实现ajax无刷新验证注册用户名是否可用,只用一个有注册的网站都应该会用的上

ivan_ou
评论
收藏 已收藏
分享
返回顶部