`
liusg123
  • 浏览: 17831 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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>

          <allow>

                 <create creator="new" javascript="MessagePush">

                 <param name="class" value="com.huatech.messageremind.service.MessagePush"/>

              </create>

          </allow>

     </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中配置的javascript,engine.js和util.js是必须引入的。

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

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

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

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

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

          js的调用方法如下:

          function onPageLoad(){

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

             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 = 1L;
       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);当然也可以通过调用其他DWR的方法实现不同的调用方式。

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

相关推荐

    dwr精准推送

    在这个项目中,"dwr精准推送"是指利用DWR技术来实现针对特定用户的实时消息推送功能。 首先,我们来详细了解一下DWR的工作原理。DWR通过创建一个HTTP长连接或短连接(取决于配置)来保持客户端和服务器端的通信。当...

    Java Dwr实现消息精准推送以及js调用后台+demo

    5. **消息精准推送**:在描述中提到了“消息精准推送”,这意味着我们需要根据用户或特定条件向客户端发送数据。DWR支持Push技术,可以主动将服务器端的数据推送到客户端。例如,可以创建一个后台线程,监听数据库...

    DWR消息推送简单实例

    本实例主要关注DWR的消息推送功能,这在创建实时更新的应用如聊天室、股票报价或在线游戏等场景中非常有用。 1. **DWR框架概述** DWR框架的核心是将Java对象暴露给JavaScript,使得前端可以像操作本地对象一样操作...

    使用dwr+spring实现消息推送

    总的来说,结合DWR和Spring,我们可以构建出一个高效、可扩展的消息推送系统,使得Web应用能够实时地与用户互动,提升用户体验。在实际项目中,还需要考虑安全性、错误处理、性能监控等方面,确保系统的稳定性和可靠...

    DWR推送技术大全 dwr推送聊天实例

    总的来说,DWR推送技术通过Comet实现了高效的服务器到客户端的数据推送,简化了实时Web应用的开发。结合提供的源码示例"j-jetty-dwr-comet-src",开发者可以深入理解DWR的工作原理,并学习如何在实际项目中应用这项...

    实现 Dwr 服务器推送

    本文将详细介绍如何实现DWR的服务器推送功能。 一、DWR简介 DWR的核心功能是通过AJAX技术创建了一个JavaScript到Java的桥梁,使得开发者可以像操作本地对象一样操作远程服务器上的对象。它支持自动类型转换、错误...

    WEB端精准消息推送 dwr

    "WEB端精准消息推送 dwr" 这个标题暗示了我们要讨论的是一个基于DWR(Direct Web Remoting)技术实现的WEB应用,该应用具有精确的消息推送功能,可以实现在Web端进行一对一的消息传递。 **描述详解:** 描述中提到...

    dwr消息推送功能

    ### dwr消息推送功能 Direct Web Remoting (DWR) 是一种开源框架,它简化了JavaScript与服务器端Java代码之间的交互。DWR 提供了一种简单的方法来将 Java 对象暴露给 JavaScript,允许 JavaScript 调用 Java 方法,...

    dwr消息推送详细步骤

    在本文中,我们将深入探讨如何使用DWR实现服务器到客户端的消息推送。 1. **DWR基本概念** DWR的核心功能是提供一种方式让Java方法可以直接调用JavaScript函数,反之亦然。这使得服务器能够实时地向浏览器发送数据...

    DWR后台精准推送信息至前台

    在“DWR后台精准推送信息至前台”这个主题中,我们将深入探讨DWR如何实现消息推送,并为初学者提供一个入门的指南。 1. **DWR基础概念**: - **Direct Web Remoting**:DWR的核心理念是创建一种无缝的接口,让...

    dwr消息推送完整示例

    总的来说,"dwr消息推送完整示例"旨在展示如何利用DWR实现实时的消息推送,这对于构建交互性强、用户体验良好的Web应用至关重要。通过学习和实践这个示例,开发者可以更好地理解和掌握DWR的特性和消息推送的实现方式...

    dwr3推送消息

    当服务器有新消息时,会立即通过这个开放的连接推送给客户端,而无需客户端再次发起请求。 要实现DWR3的推送消息,首先需要在服务器端配置DWR。这包括创建`dwr.xml`配置文件,定义允许的远程方法,并启用推送支持。...

    dwr消息推送demo

    以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...

    dwr demo 反向推送 导向推送

    对于用户ID的使用,可能是通过Session存储用户信息,然后在推送时根据用户ID来决定将消息推送给哪个用户的浏览器。 总结来说,"dwr demo 反向推送 导向推送"是一个演示如何使用DWR实现实时服务器推送的项目,它包括...

    dwr java推送例子 免积分

    这个"免积分"的例子可能是为了帮助开发者理解如何在DWR框架下实现实时的数据推送,而无需通过复杂的积分系统或者其他权限验证。这种推送技术在Web应用中非常有用,可以用来更新用户界面而无需手动刷新页面。 首先,...

    DWR服务器推送技术(实时)

    DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...

    DWR 后台推送(线程监听、多页面推送,附完整实例)

    里面有详细的注释说明,主要实现DWR推送、线程监听、事件监听、主动推送。。写得不好,请见谅。。然后有个特别需要注意的,部署好项目以后,访问的方式是:http://localhost:9999/MonitorSystem/indexTo,特别注意...

    dwr实现消息精确推送

    ### dwr实现消息精确推送详解 #### 一、前言 Direct Web Remoting(DWR)是一种开源技术,它使得JavaScript可以直接调用服务器端的Java方法成为可能,从而简化了客户端与服务器之间的交互过程。本篇文章将详细介绍...

    dwr3实现推送功能

    利用DWR 3 实现推送功能,可以显著提升Web应用的实时性和用户体验。通过合理配置和编程,可以实现高效、稳定的推送服务,满足各种实时应用场景的需求。 以上就是DWR 3 实现推送功能的主要步骤和注意事项,希望对你...

    dwr后台推送

    除了代码实现,提供的`DWR推技术PPT.pptx`可能包含了一份详细的讲解,涵盖了DWR后台推送的基本概念、工作原理、配置步骤以及最佳实践。这份PPT可以作为深入理解DWR推送技术的补充资料。 另外,`DWR推技术在开发中...

Global site tag (gtag.js) - Google Analytics