DWR精准推送给特定用户

阅读更多
     第一、在项目中引入dwr.jar,然后在web.xml中进行配置,配置如下:

    

        dwr-invoker

       

            org.directwebremoting.servlet.DwrServlet

       


       

            crossDomainSessionSecurity

               false

           


       

          allowScriptTagRemoting

          true

       


       

          classes

          java.lang.Object

       


       

            activeReverseAjaxEnabled

            true

       


       

           initApplicationScopeCreatorsAtStartup

           true

       


       

            maxWaitAfterWrite

            3000

       


       

            debug

            true

       


       

            logLevel

            WARN

       


   


    第二:在web.xml的同级目录下新建dwr.xml文件,内容如下

    

    

         

                

                

             


         


    


    这个是dwr的基本配置,MessagePush在页面的javascript中使用,com.huatech.messageremind.service.MessagePush实现了想要调用的方法,MessagePush我觉得就相当于java类中的一个映射,在javascript中使用MessagePush.java类中实现的方法,即可在dwr中调用。

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

         

       

       

          可以看见,也引入了dwr.xml中配置的javascript,engine.js和util.js是必须引入的。

以上三点都是基本配置,没什么好说的,想使用dwr,就得这么做。

   第四,实现消息的精准推送(页面最重要的代码)

        消息推送简单,但是想实现精准推送就需要做一些别的操作了

        1 在任何一个用户登录的时候,都需要将其userId或者其他唯一性标识放入session中,这里以 userId为唯一性标识。

        2 在载入想推送的页面时,需要onload一个我在MessagePush类中实现的方法,当然了,需要使用dwr调用

          js的调用方法如下:

          function onPageLoad(){

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

             MessagePush.onPageLoad(userId);

         }

                           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 sessions = Browser.getTargetSessions();

                      for (ScriptSession scriptSession : sessions) {
                           scriptSession.addScript(script);
                       }
                     }

              });

       }

        userid即为你想推给消息的人,message为你想推送的消息,大家注意到这里script.appendCall("showMessage", autoMessage);当然也可以通过调用其他DWR的方法实现不同的调用方式。

         其中showMessage为在想推送的页面中的javascript方法,autoMessage是这个方法的参数,这样那个页面就能得到推送的内容了,至于如何展现,就看需求了。

你可能感兴趣的:(dwr,消息推送,精准,用户,定位)