實現步驟:javascript
第1、在項目中引入dwr.jar,而後在web.xml中進行配置,配置以下:html
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
第二:和web.xml同級目增長dwr.xml,內容以下java
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"> <dwr> <alow> <create creator="new" javascript="MessagePush"> <param name="class" value="com.pcitc.lw.service.MessagePush"/> </create> <create creator="new" javascript="TestPush"> <param name="class" value="com.pcitc.lw.service.Test"/> </create> </alow> </dwr>
dwr的基本配置指向具體實現類,MessagePush在頁面的javascript中使用(被推送者),Test推送者jquery
第三,被推送的頁面web
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="cache-control" content="no-cache"> </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.id}'; MessagePush.onPageLoad(userId); } //推送信息 function showMessage(mgs){ alert(mgs); } </script> <body onload="onPageLoad();dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);"> <div id="DemoDiv">hello world</div> </body> </html>
注意:頁面加載時加載的函數setActiveReverseAjax和setNotifyServerOnPageUnload是dwr的,onPageLoad是將登錄的用戶和scriptSession進行綁定,爲之後的推送作準備。session
第四 MessagePush類:app
public void onPageLoad(String userId) { ScriptSession scriptSession = WebContextFactory.get().getScriptSession(); scriptSession.setAttribute(userId, userId); DwrSSessionUtil ss = new DwrSSessionUtil(); try { ss.init(); } catch (ServletException e) { e.printStackTrace(); } }
第五:DwrSSessionUtil :函數
public class DwrSSessionUtil extends DwrServlet{ 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")).getId()+""; System.out.println("a ScriptSession is created!"); ev.getSession().setAttribute("userId", userId); } public void sessionDestroyed(ScriptSessionEvent ev) { System.out.println("a ScriptSession is distroyed"); } }; manager.addScriptSessionListener(listener); } }
第五 JSP頁面:ui
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0" <script type="text/javascript" src="js/jquery-2.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 msg = document.getElementById("msgId").value; TestPush.sendMessageAuto(msg,"收到沒"); } </script> </head> <body> id:<input type="text" name="msgId" id="msgId" /> <br /> <input type="button" value="你好" onclick="test()" /> </body> </html>
第六:推送代碼:url
public class Test{ public void sendMessageAuto(String userid, String 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 s = new ScriptBuffer(); public void run(){ s.appendCall("showMessage", autoMessage); Collection<ScriptSession> sessions = Browser.getTargetSessions(); for (ScriptSession scriptSession : sessions){ scriptSession.addScript(s); } } }); } }