DWR3实现服务器端向指定浏览器推送消息
2018-02-05 17:06
323 查看
DWR3实现服务器端向指定浏览器推送消息
完整的项目下载地址(可运行)
http://download.csdn.net/download/weixin_39549656/10240930慕课网对于DWR3介绍,仅限于服务器向所有浏览器推送数据.在实际开发中更多的是服务端向指定浏览器推送信息(例如QQ邮箱)
不同页面开始测试的
总不能把某个人邮箱信息推送到所有浏览器,然后再浏览器端进行验证吧.
话不多说直接上代码
项目目录结构
启动项目成功之后图片
注册成功页面
发送信息页面
发送之后
代码
DwrScriptSessionManagerUtil.javapackage 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>
相关文章推荐
- DWR3实现服务器端向客户端精确推送消息
- DWR3实现服务器端向客户端精确推送消息
- DWR3实现服务器端向客户端精确推送消息
- DWR3实现服务器端向客户端精确推送消息
- DWR3实现服务器端向客户端精确推送消息
- DWR3实现服务器端向客户端精确推送消息
- 极光消息推送服务器端开发实现推送(上)
- dwr3实现消息精确推送详细步骤
- dwr3实现消息精确推送详细步骤
- 极光消息推送服务器端开发实现推送(上)
- dwr3与struts2整合,实现服务器端推送技术,实现多人聊天功能
- springboot实现服务器端消息推送(websocket + sockjs + stomp)
- Pushlet实现消息从服务器端推送到客户端
- dwr3实现消息精准推送详细步骤
- Android消息推送的Androidpn实现方式:(一)下载androidpn服务器端与客户端的Demo并运行
- DWR实现服务器端向客户端推送消息
- dwr3与struts2整合,实现服务器端推送技术,实现多人聊天功能
- iPhone消息推送机制实现与探讨(写的很透彻,还介绍了服务器端的代码)
- Java Dwr3实现消息推送步骤详解
- Pushlet之消息通知- 实现服务器端推送技术