DWR由服務器端向客戶端推送消息

實現步驟: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);  
                }  
            }  
        });  
    }  
}
相關文章
相關標籤/搜索