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

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

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

    少年阿賓

    那些青春的歲月

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

         第一、在項(xiàng)目中引入dwr.jar,然后在web.xml中進(jìn)行配置,配置如下:

         <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的同級(jí)目錄下新建dwr.xml文件,內(nèi)容如下

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

        這個(gè)是dwr的基本配置,MessagePush在頁(yè)面的javascript中使用,com.huatech.messageremind.service.MessagePush實(shí)現(xiàn)了想要調(diào)用的方法,MessagePush我覺(jué)得就相當(dāng)于java類中的一個(gè)映射,在javascript中使用MessagePush.java類中實(shí)現(xiàn)的方法,即可在dwr中調(diào)用。

        第三,要想使用dwr,還要在你想要推送的頁(yè)面中引入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>

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

     以上三點(diǎn)都是基本配置,沒(méi)什么好說(shuō)的,想使用dwr,就得這么做。

       第四,實(shí)現(xiàn)消息的精準(zhǔn)推送

            消息推送簡(jiǎn)單,但是想實(shí)現(xiàn)精準(zhǔn)推送就需要做一些別的操作了

            1 在任何一個(gè)用戶登錄的時(shí)候,都需要將其userId或者其他唯一性標(biāo)識(shí)放入session中,我放的是userId

              這里就以 userId為唯一性標(biāo)識(shí)。

            2 在載入想推送的頁(yè)面時(shí),需要onload一個(gè)我在MessagePush類中實(shí)現(xiàn)的方法,當(dāng)然了,需要使用dwr調(diào)用

              js的調(diào)用方法如下:

               function onPageLoad(){

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

                 MessagePush.onPageLoad(userId);

              }

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

               MessagePush類中實(shí)現(xiàn)的方法如下:

               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方法中還有一個(gè)名為DwrScriptSessionManagerUtil的類,該類如下實(shí)現(xiàn):

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

     

           }

     

    }

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

          第五、消息推送

                在你想要推送消息的時(shí)候,調(diào)用如下方法:

                 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為在想推送的頁(yè)面中的javascript方法,autoMessage是這個(gè)方法的參數(shù),這樣那個(gè)頁(yè)面就能得到推送的內(nèi)容了,至于如何展現(xiàn),就看你的需要了。

     

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

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

    Feedback

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2012-12-22 22:56 飛龍劍
    謝謝你的教程,這個(gè)東西網(wǎng)上說(shuō)得都不完全,找了好久終于找到一篇高質(zhì)量的教程。通過(guò)你的教程我終于把消息推送提醒搞定了。  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-04-18 17:15 luojia_wang
    我按照你的方法實(shí)現(xiàn)的例子 為什么說(shuō)找不到showMessage 這個(gè)方法我是定義了的啊  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-04-18 17:27 luojia_wang
    出來(lái)了,剛才是不曉得為什么不成功,現(xiàn)在沒(méi)有改什么居然成功了,對(duì)你表示萬(wàn)分感謝!  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-04-25 15:19 wangg
    好像sessionDestroyed方法上面都沒(méi)有做吧 那么scriptsession會(huì)越來(lái)越多 最好導(dǎo)致內(nèi)存溢出。請(qǐng)問(wèn)怎么銷毀scriptsession  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-05-16 14:22 11111
    @wangg
    這篇文章的監(jiān)聽(tīng)器處理是有問(wèn)題的 監(jiān)聽(tīng)?wèi)?yīng)該永遠(yuǎn)只有一個(gè) 最好把監(jiān)聽(tīng)寫在系統(tǒng)啟動(dòng)的時(shí)候執(zhí)行  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-05-24 18:55 lyndon
    可以推送,但是頁(yè)面總是彈出 No data receiver from server  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2013-07-11 16:20 s
    你好,方便的話請(qǐng)幫忙回答下,sendMessageAuto 這個(gè)方法放到那個(gè)類里,并且我總是在引入js 時(shí),不能找到dwr對(duì)象呢?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-08-05 12:35 hww
    你把消息推送搞定了?能討論一下么~@飛龍劍
      回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2013-08-08 09:16 劉磊
    MessagePush.js里面有些啥哦  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2013-08-12 17:50 瘋子
    這個(gè)只需要導(dǎo)入dwr的包就好了嗎?第五步的時(shí)候我怎么老是找不到類呢?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2013-08-12 17:51 瘋子
    @劉磊
    你的能出效果嗎?可以給我個(gè)你測(cè)試的代碼不?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2013-09-03 14:49 111
    111  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2013-10-26 21:42 TY
    @luojia_wang
    XXXXXXX  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-01-16 10:17 wen
    @s 放在DwrScriptSessionManagerUtil 里  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-01-16 10:18 wen
    這個(gè)文件引入就行不用寫 @劉磊
      回復(fù)  更多評(píng)論
      

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

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-04-03 09:30 灰灰
    @王威
    我與你遇到的情況一樣,88 行,報(bào)空指針異常,你解決了么  回復(fù)  更多評(píng)論
      

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

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

      回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-05-02 14:58 kingsea
    謝謝  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2014-07-09 11:32 超人
    你這個(gè)工程還有源碼嗎,給我一份唄,郵箱1906673110@qq.com  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2014-07-09 11:34 超人
    你這個(gè)工程還有源碼嗎,給我一分唄,郵箱1906673110@qq.com 謝謝了。  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-07-12 16:01 游客
    為什么我的Browser和ScriptSessionFilter這兩個(gè)類找不到呢,是還缺少別的包嗎?求解答謝謝  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-07-25 17:22 xiei
    是dwr3不是dwr2
    @游客
      回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-07-25 17:23 謝謝樓主
    太感謝了。寫的好。但是DwrScriptSessionManagerUtil extends DwrServlet這個(gè)沒(méi)必要繼承吧?沒(méi)看懂為什么需要繼承  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-08-27 12:23 路過(guò)
    @游客
    朋友你好,我也沒(méi)有找到,請(qǐng)問(wèn)你解決了嗎?我建的是maven工程。  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-09-04 11:38 darren
    請(qǐng)問(wèn)這個(gè)dwr是瀏覽器主動(dòng)請(qǐng)求服務(wù)端還是服務(wù)端主動(dòng)推送到瀏覽器?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-09-10 16:30 亮亮
    真的很厲害呢,都說(shuō)樓主的很好  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-09-10 16:32 亮亮
    剛看到一個(gè)博客,專門附了樓主的鏈接呢,表示感謝呢,看來(lái)對(duì)我這個(gè)菜鳥(niǎo)有很大幫助  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-10-28 11:03 yys
    MessagePush.js里面都有什么  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-10-28 11:53 yys
    Container類需要自己建嗎  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-11-17 16:32 天道獨(dú)行
    為什么我這sripterBuffer沒(méi)有appendCall(a,b)方法  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-11-23 20:20 xuxiuyuan
    你好,你還有整個(gè)工程的源碼,我可以看下嗎?感激不盡,郵箱1940471492@qq.com  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-11-25 21:13 發(fā)
    <script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script> 這個(gè)是什么的js  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2014-12-01 16:31 Change
    正好在學(xué)習(xí)這部分內(nèi)容,謝謝!  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2014-12-01 16:32 Change

    能否提供源碼,非常感謝!223130021@qq.com  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2014-12-08 15:29 asd
    @王威
    你好請(qǐng)問(wèn)你解決了么 是什么問(wèn)題  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2015-02-04 11:45 貓貍粽子
    你好,a ScriptSession is created 沒(méi)有你說(shuō)的那么復(fù)雜 ScriptSession scriptSession = WebContextFactory.get()
    .getScriptSession(); 這樣就能獲取到scriptSession  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2015-06-16 11:47 111
    good  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2015-08-17 16:19 orican
    為什么我的過(guò)濾工具類沒(méi)有執(zhí)行啊?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2015-09-05 23:13 test_yf
    dwr.xml alow 改為 allow  回復(fù)  更多評(píng)論
      

    # MessagePush.js不知如何寫 2015-09-09 16:24 陳四超
    MessagePush.js不知道怎么寫?還報(bào)dwr未定義  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2015-10-21 12:28 klp
    多謝大神,簡(jiǎn)潔明了,比其他的更勝一籌。  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2016-05-09 09:28 小澤瑪莉亞
    只需要dwr.jar?  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2016-05-25 10:18 aa
    wrer  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2016-05-26 11:56 Emma
    GoEasy,專業(yè)做web消息推送的工具,服務(wù)器穩(wěn)定,中英文都齊全,代碼簡(jiǎn)潔易懂;官網(wǎng):https://goeasy.io/  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 [未登錄](méi) 2016-06-28 16:52 winter
    您好問(wèn)下,maven工程pom.xml中配置的dwr是啥版本,現(xiàn)在報(bào)MessagePush.js找不到  回復(fù)  更多評(píng)論
      

    # re: dwr3實(shí)現(xiàn)消息精確推送詳細(xì)步驟 2016-08-22 13:48 z_東九
    源碼誰(shuí)有啊,求發(fā)給我,QQ798923617  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 免费在线观看黄色毛片| 久久亚洲一区二区| 免费无码又爽又刺激网站 | 在线a人片天堂免费观看高清| 亚洲av永久中文无码精品综合| 亚洲裸男gv网站| 无码一区二区三区免费| 亚洲国产精品网站在线播放| 中文字幕亚洲综合久久菠萝蜜| 69免费视频大片| 无码免费又爽又高潮喷水的视频 | 情人伊人久久综合亚洲| 中国在线观看免费高清完整版| 亚洲天堂免费在线视频| 国产精品亚洲一区二区麻豆| 亚洲中文字幕日产乱码高清app| 波多野结衣在线免费视频| 一级免费黄色大片| 亚洲中文无码永久免费| 亚洲爆乳无码一区二区三区| 国产精品酒店视频免费看| 97在线视频免费| 91av免费在线视频| 亚洲日本一线产区和二线| 国产v亚洲v天堂无码网站| 免费va在线观看| 69式国产真人免费视频| 在线涩涩免费观看国产精品 | 国产精品久久久久免费a∨| 国产精品福利片免费看 | 亚洲第一网站免费视频| 久久嫩草影院免费看夜色| 亚洲乱码无人区卡1卡2卡3| 亚洲三级电影网址| 亚洲真人日本在线| 国产精品jizz在线观看免费| 欧美好看的免费电影在线观看| 精品一区二区三区免费毛片爱 | 久久久青草青青国产亚洲免观 | 亚洲精品线路一在线观看| 在线观看免费污视频|