您的位置:首页 > 其它

DWR3实现服务器端向指定浏览器推送消息

2018-02-05 17:06 323 查看

DWR3实现服务器端向指定浏览器推送消息

完整的项目下载地址(可运行)

http://download.csdn.net/download/weixin_39549656/10240930

慕课网对于DWR3介绍,仅限于服务器向所有浏览器推送数据.在实际开发中更多的是服务端向指定浏览器推送信息(例如QQ邮箱)

不同页面开始测试的



总不能把某个人邮箱信息推送到所有浏览器,然后再浏览器端进行验证吧.

话不多说直接上代码

项目目录结构



启动项目成功之后图片



注册成功页面



发送信息页面



发送之后



代码

DwrScriptSessionManagerUtil.java

package com.huatech.messageremind.service;

import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;

import org.directwebremoting.Container;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.event.ScriptSessionEvent;
import org.directwebremoting.event.ScriptSessionListener;
import org.directwebremoting.extend.ScriptSessionManager;
import org.directwebremoting.servlet.DwrServlet;

public class DwrScriptSessionManagerUtil extends DwrServlet{

private static final long serialVersionUID = -7504612622407420071L;

public void init()throws ServletException {

Container container = ServerContextFactory.get().getContainer();
ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);
ScriptSessionListener listener = new ScriptSessionListener() {
public void sessionCreated(ScriptSessionEvent ev) {
HttpSession session = WebContextFactory.get().getSession();

String userId =((User) session.getAttribute("userinfo")).getHumanid()+"";
System.out.println("用户id为"+userId+"ScriptSession创建成功!");
ev.getSession().setAttribute("userId", userId);
}
public void sessionDestroyed(ScriptSessionEvent ev) {
System.out.println("ScriptSession已经销毁");
}
};
manager.addScriptSessionListener(listener);
}
}


MessagePush.java

package com.huatech.messageremind.service;

import javax.servlet.ServletException;

import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContextFactory;

public class MessagePush
{
public void onPageLoad(String userId) {

ScriptSession scriptSession = WebContextFactory.get().getScriptSession();

scriptSession.setAttribute(userId, userId);

DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();

try {

dwrScriptSessionManagerUtil.init();
System.out.println("DwrScriptSessionManagerUtil初始化成功");

} catch (ServletException e) {

e.printStackTrace();

}

}

}


Test.java

package com.huatech.messageremind.service;

import java.util.Collection;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;

public class Test{
public void sendMessageAuto(String userid, String message){
System.out.println("发送"+userid);
System.out.println("发送"+message);
final String userId = userid;
final String autoMessage = message;
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
public boolean match(ScriptSession session){
if (session.getAttribute("userId") == null)
return false;
else
return (session.getAttribute("userId")).equals(userId);
}
}, new Runnable(){

private ScriptBuffer script = new ScriptBuffer();

public void run(){

script.appendCall("showMessage", "用户"+userid+"的message :"+autoMessage);

Collection<ScriptSession> sessions = Browser

.getTargetSessions();

for (ScriptSession scriptSession : sessions){
scriptSession.addScript(script);
}
}
});
}
}


User.java

package com.huatech.messageremind.service;

public class User
{
int humanid ;
String name ;
public int getHumanid()
{
return humanid;
}
public void setHumanid(int humanid)
{
this.humanid = humanid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}

}


dwr.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<!-- Reverse Ajax Stock push Demo Config
<create creator="new" javascript="StocksPusher">
<param name="class" value="com.test.dwr.servlet.Test"/>
</create>

<convert converter="bean" match="com.test.dwr.bean.Message">
<param name="include" value="id,context" />
</convert>
-->
<create creator="new" javascript="MessagePush">

<param name="class" value="com.huatech.messageremind.service.MessagePush"/>

</create>

<create creator="new" javascript="TestPush">

<param name="class" value="com.huatech.messageremind.service.Test"/>

</create>

</allow>
</dwr>


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet>
<servlet-name>dwr-invoker</servlet-name>

<servlet-class>

org.directwebremoting.servlet.DwrServlet

</servlet-class>

<init-param>

<param-name>crossDomainSessionSecurity</param-name>

<param-value>false</param-value>

</init-param>

<init-param>

<param-name>allowScriptTagRemoting</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>classes</param-name>

<param-value>java.lang.Object</param-value>

</init-param>

<init-param>

<param-name>activeReverseAjaxEnabled</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>initApplicationScopeCreatorsAtStartup</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>maxWaitAfterWrite</param-name>

<param-value>3000</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>logLevel</param-name>

<param-value>WARN</param-value>

</init-param>

</servlet>

<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>LoginAction</servlet-name>
<servlet-class>com.test.servlet.LoginAction</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>LoginAction</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>DWR  DEMO</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type="text/javascript" src="dwr/interface/MessagePush.js"></script>

<script type="text/javascript">
//通过该方法与后台交互,确保推送时能找到指定用户
function onPageLoad(){
var userId = '${userinfo.humanid}';
MessagePush.onPageLoad(userId);

}
//推送信息
function showMessage(autoMessage){
alert(autoMessage);

}
</script>
<body onload="onPageLoad();dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);;">
用户iD:${userinfo.humanid} <hr>
<br>
<div id="DemoDiv">注册成功,请去MyJsp.jsp向此用户ID发送信息</div>
</body>
</html>


login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form action="login.do" method="post">
用户ID:<input type="text" name="id" /><br />
<input type="submit" value="用户注册" />
</form>
</body>
</html>


MyJsp.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'MyJsp.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.5.1.js"></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type='text/javascript' src='dwr/interface/TestPush.js'></script>

<script type="text/javascript">

function test() {
var userID = document.getElementById("msgId").value;
var msg = document.getElementById("msg").value;
//msg = {msgId: '1', context: $("#msgContext").val()};
TestPush.sendMessageAuto(userID,msg);

}
</script>
</head>

<body>
<h1> 请先去login.jsp注册用户ID</h1><br>
准备发送的用户id    : <input type="text" name="msgId" id="msgId" /> <br />
发送的内容    : <input type="text" name="msg" id="msg" /> <br />
<input type="button" value="Send" onclick="test()"  />

</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: