<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
        這幾天做項目,需要一個消息提醒功能,決定用dwr實現,在dwr官網和網上找了很多資料,也沒實現精準推送,大多數的例子具體步驟寫的不清楚,不怎么了解dwr的人看了也未必能看懂,反正我是沒看懂,那時就決定,若自己實現了,一定將具體步驟寫下來,希望能給那些和我一樣的人一些幫助,若有不明白的,可以給小弟留言。我只寫步驟,不寫原理,下面開始。

         第一、在項目中引入dwr.jar,然后在web.xml中進行配置,配置如下:

         <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>

        第二:在web.xml的同級目錄下新建dwr.xml文件,內容如下

         <!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.huatech.messageremind.service.MessagePush"/>

                  </create>

              </alow>

         </dwr>

        這個是dwr的基本配置,MessagePush在頁面的javascript中使用,com.huatech.messageremind.service.MessagePush實現了想要調用的方法,MessagePush我覺得就相當于java類中的一個映射,在javascript中使用MessagePush.java類中實現的方法,即可在dwr中調用。

        第三,要想使用dwr,還要在你想要推送的頁面中引入script

              <script type="text/javascript" src="<%=basepath%>dwr/engine.js"></script>

            <script type="text/javascript" src="<%=basepath%>dwr/util.js"></script>

            <script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script>

              可以看見,也引入了dwr.xml中配置的javascriptengine.jsutil.js是必須引入的。

     以上三點都是基本配置,沒什么好說的,想使用dwr,就得這么做。

       第四,實現消息的精準推送

            消息推送簡單,但是想實現精準推送就需要做一些別的操作了

            1 在任何一個用戶登錄的時候,都需要將其userId或者其他唯一性標識放入session中,我放的是userId

              這里就以 userId為唯一性標識。

            2 在載入想推送的頁面時,需要onload一個我在MessagePush類中實現的方法,當然了,需要使用dwr調用

              js的調用方法如下:

               function onPageLoad(){

                 var userId = '${userinfo.humanid}';

                 MessagePush.onPageLoad(userId);

              }

                <body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onPageLoad();> onload中的三個函數都是必須的,其中dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);dwr中的函數。

               MessagePush類中實現的方法如下:

               public void onPageLoad(String userId) {

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

                  scriptSession.setAttribute(userId, userId);

                  DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();

                  try {

                         dwrScriptSessionManagerUtil.init();

                  } catch (ServletException e) {

                         e.printStackTrace();

                  }

           }

             大家注意到,onPageLoad方法中還有一個名為DwrScriptSessionManagerUtil的類,該類如下實現:

             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("a ScriptSession is created!");

                                ev.getSession().setAttribute("userId", userId);

     

                         }

     

                         public void sessionDestroyed(ScriptSessionEvent ev) {

                                System.out.println("a ScriptSession is distroyed");

                         }

     

                  };

     

                  manager.addScriptSessionListener(listener);

     

           }

     

    }

    第四步是最最重要的,為了第四步我研究了兩天多,下面開始消息推送。

          第五、消息推送

                在你想要推送消息的時候,調用如下方法:

                 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 script = new ScriptBuffer();

                         public void run() {

                                script.appendCall("showMessage", autoMessage);

                                Collection<ScriptSession> sessions = Browser

                                .getTargetSessions();

                                for (ScriptSession scriptSession : sessions) {

                                       scriptSession.addScript(script);

                                }

                         }

                        

                  });

           }

             userid即為你想推給消息的人,message為你想推送的消息,大家注意到這里script.appendCall("showMessage", autoMessage);

             其中showMessage為在想推送的頁面中的javascript方法,autoMessage是這個方法的參數,這樣那個頁面就能得到推送的內容了,至于如何展現,就看你的需要了。

     

            至此,一個dwr消息精準推送的步驟就寫完了,其實很多東西都不難,只是我們不知道該怎么用而已。

    posted on 2012-07-07 15:10 abin 閱讀(33437) 評論(48)  編輯  收藏 所屬分類: Javascript

    Feedback

    # re: dwr3實現消息精確推送詳細步驟 2012-12-22 22:56 飛龍劍
    謝謝你的教程,這個東西網上說得都不完全,找了好久終于找到一篇高質量的教程。通過你的教程我終于把消息推送提醒搞定了。  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-04-18 17:15 luojia_wang
    我按照你的方法實現的例子 為什么說找不到showMessage 這個方法我是定義了的啊  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-04-18 17:27 luojia_wang
    出來了,剛才是不曉得為什么不成功,現在沒有改什么居然成功了,對你表示萬分感謝!  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-04-25 15:19 wangg
    好像sessionDestroyed方法上面都沒有做吧 那么scriptsession會越來越多 最好導致內存溢出。請問怎么銷毀scriptsession  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-05-16 14:22 11111
    @wangg
    這篇文章的監聽器處理是有問題的 監聽應該永遠只有一個 最好把監聽寫在系統啟動的時候執行  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-05-24 18:55 lyndon
    可以推送,但是頁面總是彈出 No data receiver from server  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2013-07-11 16:20 s
    你好,方便的話請幫忙回答下,sendMessageAuto 這個方法放到那個類里,并且我總是在引入js 時,不能找到dwr對象呢?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-08-05 12:35 hww
    你把消息推送搞定了?能討論一下么~@飛龍劍
      回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2013-08-08 09:16 劉磊
    MessagePush.js里面有些啥哦  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2013-08-12 17:50 瘋子
    這個只需要導入dwr的包就好了嗎?第五步的時候我怎么老是找不到類呢?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2013-08-12 17:51 瘋子
    @劉磊
    你的能出效果嗎?可以給我個你測試的代碼不?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2013-09-03 14:49 111
    111  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2013-10-26 21:42 TY
    @luojia_wang
    XXXXXXX  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-01-16 10:17 wen
    @s 放在DwrScriptSessionManagerUtil 里  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-01-16 10:18 wen
    這個文件引入就行不用寫 @劉磊
      回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-01-21 14:22 王威
    你好,我在按照你的方法使用時,Browser.withAllSessionsFiltered(new ScriptSessionFilter() Browser 類的88 行,包空指針異常,不知道是為什么?請高手指點  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-04-03 09:30 灰灰
    @王威
    我與你遇到的情況一樣,88 行,報空指針異常,你解決了么  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-04-11 11:33 王林
    樓主,厲害!
    灰灰 在登陸時 調用DwrScriptSessionManagerUtil 的.init()方法即可  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-04-11 15:06 王林
    樓主,厲害!
    灰灰 在登陸時 調用DwrScriptSessionManagerUtil 的.init()方法即可
    @王林 我看錯了 樓主的方法直接用就很好

      回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-05-02 14:58 kingsea
    謝謝  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2014-07-09 11:32 超人
    你這個工程還有源碼嗎,給我一份唄,郵箱1906673110@qq.com  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2014-07-09 11:34 超人
    你這個工程還有源碼嗎,給我一分唄,郵箱1906673110@qq.com 謝謝了。  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-07-12 16:01 游客
    為什么我的Browser和ScriptSessionFilter這兩個類找不到呢,是還缺少別的包嗎?求解答謝謝  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-07-25 17:22 xiei
    是dwr3不是dwr2
    @游客
      回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-07-25 17:23 謝謝樓主
    太感謝了。寫的好。但是DwrScriptSessionManagerUtil extends DwrServlet這個沒必要繼承吧?沒看懂為什么需要繼承  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-08-27 12:23 路過
    @游客
    朋友你好,我也沒有找到,請問你解決了嗎?我建的是maven工程。  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-09-04 11:38 darren
    請問這個dwr是瀏覽器主動請求服務端還是服務端主動推送到瀏覽器?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-09-10 16:30 亮亮
    真的很厲害呢,都說樓主的很好  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-09-10 16:32 亮亮
    剛看到一個博客,專門附了樓主的鏈接呢,表示感謝呢,看來對我這個菜鳥有很大幫助  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-10-28 11:03 yys
    MessagePush.js里面都有什么  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-10-28 11:53 yys
    Container類需要自己建嗎  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-11-17 16:32 天道獨行
    為什么我這sripterBuffer沒有appendCall(a,b)方法  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-11-23 20:20 xuxiuyuan
    你好,你還有整個工程的源碼,我可以看下嗎?感激不盡,郵箱1940471492@qq.com  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-11-25 21:13
    <script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script> 這個是什么的js  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2014-12-01 16:31 Change
    正好在學習這部分內容,謝謝!  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2014-12-01 16:32 Change

    能否提供源碼,非常感謝!223130021@qq.com  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2014-12-08 15:29 asd
    @王威
    你好請問你解決了么 是什么問題  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2015-02-04 11:45 貓貍粽子
    你好,a ScriptSession is created 沒有你說的那么復雜 ScriptSession scriptSession = WebContextFactory.get()
    .getScriptSession(); 這樣就能獲取到scriptSession  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2015-06-16 11:47 111
    good  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2015-08-17 16:19 orican
    為什么我的過濾工具類沒有執行啊?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2015-09-05 23:13 test_yf
    dwr.xml alow 改為 allow  回復  更多評論
      

    # MessagePush.js不知如何寫 2015-09-09 16:24 陳四超
    MessagePush.js不知道怎么寫?還報dwr未定義  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2015-10-21 12:28 klp
    多謝大神,簡潔明了,比其他的更勝一籌。  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2016-05-09 09:28 小澤瑪莉亞
    只需要dwr.jar?  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2016-05-25 10:18 aa
    wrer  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2016-05-26 11:56 Emma
    GoEasy,專業做web消息推送的工具,服務器穩定,中英文都齊全,代碼簡潔易懂;官網:https://goeasy.io/  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 [未登錄] 2016-06-28 16:52 winter
    您好問下,maven工程pom.xml中配置的dwr是啥版本,現在報MessagePush.js找不到  回復  更多評論
      

    # re: dwr3實現消息精確推送詳細步驟 2016-08-22 13:48 z_東九
    源碼誰有啊,求發給我,QQ798923617  回復  更多評論
      

    主站蜘蛛池模板: 亚洲码在线中文在线观看| 久久亚洲精品无码aⅴ大香| baoyu116.永久免费视频| 亚洲视频在线观看网址| 在线看片无码永久免费aⅴ | 久久精品国产亚洲精品2020| 免费中文熟妇在线影片| 精品国产呦系列在线观看免费| 一区二区三区亚洲| 免费国产成人午夜私人影视| 色欲色香天天天综合网站免费| 亚洲Av永久无码精品黑人| 亚洲日韩精品无码一区二区三区 | 啦啦啦高清视频在线观看免费| 美女黄频免费网站| 亚洲国产精品张柏芝在线观看| www亚洲精品少妇裸乳一区二区| 久久青草免费91观看| 久久久久亚洲精品无码网址色欲| 亚洲∧v久久久无码精品| 国产男女猛烈无遮挡免费视频| 国产无遮挡裸体免费视频在线观看 | 亚洲日本va在线视频观看| 成年女人看片免费视频播放器| 九九美女网站免费| 日韩毛片一区视频免费| 久久精品国产99国产精品亚洲| 亚洲另类激情综合偷自拍图| 精品久久久久久久免费人妻| 一区二区三区观看免费中文视频在线播放 | 高清国语自产拍免费视频国产 | 日本高清免费中文字幕不卡| 亚洲免费闲人蜜桃| 美女在线视频观看影院免费天天看| 国产av无码专区亚洲av毛片搜| 激情亚洲一区国产精品| 亚洲尹人香蕉网在线视颅| 亚洲人成网77777亚洲色| 免费欧洲美女牲交视频| 成人片黄网站色大片免费| 免费观看激色视频网站bd|