`
pengjj2
  • 浏览: 138454 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

dwr3的推送功能使用

 
阅读更多

1、web.xml的配置,红色部分为dwr推技术的主要配置

<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>
  <init-param>
   <param-name>logLevel</param-name>
   <param-value>ERROR</param-value>
  </init-param>
  <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>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>
  <!-- 开启反转Ajax 即所谓推技术 -->
  <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>1000</param-value>
  </init-param>
  <!-- 对dwr scriptSession 自定义管理 -->
  <init-param>
   <param-name>org.directwebremoting.extend.ScriptSessionManager</param-name>
   <param-value>com.xx.xx.util.DwrScriptSessionManagerUtil</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>

 

2、由于使用dwr推技术,在每次刷新的时候都会产生一个新的scriptsession,而dwr本身并没有对旧的scriptsession进行处理,所以需要自己对其进行处理,在初始化配置中加入自己的scriptsession管理类:DwrscriptSessionManagerUtil

public class DwrScriptSessionManagerUtil extends DefaultScriptSessionManager{
 public static final String SS_ID="DWR_ScriptSession_Id";
 public DwrScriptSessionManagerUtil(){
  try{
   addScriptSessionListener(new ScriptSessionListener() {
    
    public void sessionDestroyed(ScriptSessionEvent event) {
     
    }
    
    public void sessionCreated(ScriptSessionEvent event) {
     ScriptSession scriptSession = event.getSession();//得到新创建的scriptSession
     HttpSession httpSession = WebContextFactory.get().getSession();//得到产生的httpSession
     Users user = (Users) httpSession.getAttribute(Constant.LG_SESSION_USER);//得到当前用户

     //如果当前用户已经退出系统,然后销毁这个scriptsession

     if(user==null)
     {
      scriptSession.invalidate();  
      httpSession.invalidate();  
      return;
     }
     String ssId = (String) httpSession.getAttribute(SS_ID);//查找SS_ID
     if(ssId!=null)
     {
      //说明已经存在旧的scriptSession.注销这个旧的scriptSession
      DefaultScriptSession oldScriptSession = sessionMap.get(ssId);
      if(oldScriptSession!=null)
      {
       invalidate(oldScriptSession);
      }
     }
     httpSession.setAttribute(SS_ID, scriptSession.getId());
     scriptSession.setAttribute(Constant.LG_USER_ID, user.getId());//绑定用户ID到ScriptSession上
    }
   });
  }catch (Exception e) {
   System.out.println("zhelichucuo");
   e.printStackTrace();
  }
 }
 
 public static void invalidate(String ssId)
 {
  Browser.withSession(ssId, new Runnable() {
   
   public void run() {
     Collection<ScriptSession> sessions = Browser.getTargetSessions();
     for(ScriptSession session : sessions)
     {
      session.invalidate();
     }
   }
  }); 
 }
 

}

 

3.js中开启dwr推功能

在window.onload中使用dwr.engine.setActiveReverseAjax(true);

 

4、java代码中使用dwr推功能

 

//dwr3使用新的方式进行推送,2的方法已被注明为过时,一般来说,很少是做全推送的,基本都是有针对性的半推

//送,所以我们将使用一个过滤器来过滤要推送的scriptsession,这里涉及到我的具体业务,这个过滤器的原理是会对

//所有的进行循环过滤后,将符合条件的scriptsession存放到一个集合中,才开启新线程进行处理的。

Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
    
    public boolean match(ScriptSession session) {
     Long loginUserId = (Long) session.getAttribute(Constant.LG_USER_ID);
     if(loginUserId!=null && targetIdList.contains(loginUserId))
     {
      targetIdList.remove(loginUserId);//如果找到了,说明将被推送,所以不用再处理,剩下的都是要被处理的
      return true;
     }
     return false;
    }
    }, new Runnable() {
    
     private ScriptBuffer script = new ScriptBuffer();
     public void run()
     {
      script.appendCall("这里写你页面的js函数", 这个参数是传给js函数的);
      Collection<ScriptSession> sessions = Browser.getTargetSessions();
               for (ScriptSession scriptSession : sessions)
               {
                   scriptSession.addScript(script);
               }
     //ScriptSessions.addFunctionCall("ExtTalk.updateMegGroup", data);//之所以不用这个方法,是因为这个

//方法有bug的存在,会对所有不论过不过滤的scriptsession进行推送,相当于全推送,没有起到过滤的作用
    }
   });

dwr的推功能还是很方便的,用来做消息通知还是不错的

2
1
分享到:
评论
2 楼 yazihaohao 2013-04-20  
很好,没有源码包吗
1 楼 仅此而已 2011-11-16  
写的很好,学习了!!!

相关推荐

    dwr3实现推送功能

    本篇文章将详细讲解如何利用DWR 3实现推送功能。 1. **DWR 3 的基本概念** DWR 3 提供了一种安全、高效的机制,使得JavaScript可以调用Java方法,并将结果返回到页面上。这种机制是基于HTTP的异步请求,因此无需...

    dwr消息推送功能

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

    dwr3推送消息

    在DWR3中,"推送消息"功能是其特性之一,它使得服务器能够主动向客户端推送数据,而不仅仅是响应客户端的请求。这种技术通常被称为Comet或长轮询,可以用于实现实时通信,如聊天应用、股票报价、在线游戏等场景。 ...

    DWR消息推送简单实例

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

    使用dwr+spring实现消息推送

    Spring是一个广泛使用的Java应用框架,提供了依赖注入、面向切面编程、事务管理等功能,同时也支持多种集成技术,如WebSocket、HTTP长轮询等,用于实现消息推送。 将DWR与Spring结合,可以创建出高效且易于维护的...

    实现 Dwr 服务器推送

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

    dwr3消息推送

    DWR3是DWR的一个版本,提供了更加强大和灵活的特性,包括异步通信、AJAX支持以及实时消息推送等。 在"消息推送"这一场景下,DWR3扮演了关键角色。它能够实现在一个页面上发送的消息,被其他页面实时接收和显示。...

    dwr消息推送详细步骤

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

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

    DWR推送技术的实现主要涉及以下几个关键组件: 1. **DWR Engine**:这是DWR的核心部分,负责处理JavaScript与服务器端Java对象之间的交互。它通过AJAX(Asynchronous JavaScript and XML)技术在客户端和服务器之间...

    dwr消息推送完整示例

    在这个“dwr消息推送完整示例”中,我们将深入探讨如何利用DWR实现实时的消息推送功能。 **一、DWR基础** 1. **安装与配置** 在开始之前,确保你的项目中已经包含了DWR的JAR文件。将它们添加到项目的类路径中,并...

    dwr demo 反向推送 导向推送

    总结来说,"dwr demo 反向推送 导向推送"是一个演示如何使用DWR实现实时服务器推送的项目,它包括了必要的配置和JavaScript调用,对于理解DWR的工作原理以及在实际项目中应用反向推送技术非常有帮助。通过学习这个...

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

    DWR (Direct Web Remoting) 是一种开源的Java库,它允许Web应用...- HTML和CSS文件:包含使用DWR实现服务器推送功能的示例页面。 通过学习和应用DWR,开发者可以构建出更具实时性和互动性的Web应用,提升用户的体验。

    dwr java推送例子 免积分

    总的来说,这个"DWR Java推送例子 免积分"提供了一个学习和实践DWR实时推送功能的机会,特别适合那些希望在Web应用中实现即时通信功能的开发者。通过理解并实践这个例子,你可以更好地掌握DWR的使用,以及如何在不...

    DWR3实现服务器端向客户端精确推送消息

    DWR3的消息推送功能在实时应用,如聊天室、股票报价、在线游戏等场景中非常有用。它减少了延迟,提高了用户体验。然而,需要注意的是,由于Comet技术基于长连接,可能会对服务器负载和并发性产生影响,因此在设计和...

    dwr后台推送

    在`DWR3.0_PUSH`目录下的代码示例,展示了如何在Spring环境中配置和使用DWR的推送功能。 除了代码实现,提供的`DWR推技术PPT.pptx`可能包含了一份详细的讲解,涵盖了DWR后台推送的基本概念、工作原理、配置步骤以及...

    dwr实现消息精确推送

    本篇文章将详细介绍如何利用DWR实现消息的精确推送功能。 #### 二、准备工作 在开始实现之前,我们需要做好以下几项准备工作: 1. **引入DWR库**:首先确保项目中已经包含了`dwr.jar`文件。 2. **配置web.xml**:...

    dwr2推送Demo

    在"Dwr2推送Demo"中,我们主要关注的是DWR的实时推送功能。在传统的Web应用中,页面更新通常依赖于用户手动刷新或者服务器端的请求响应。然而,DWR2引入了Push技术,使得服务器能够主动向客户端推送数据,而无需...

    dwr 消息推送

    在提供的压缩包文件`webChat`中,很可能包含了一个简单的聊天应用示例,它使用DWR实现了服务器到客户端的消息推送功能。通过分析这个示例,你可以更深入地理解DWR的使用方法,以及如何在实际项目中应用消息推送。 ...

    dwr服务器推送,dwr.jar,推送,服务器ajax,dwr服务推送例子

    在实际应用中,使用DWR服务器推送的例子可能包括实时聊天系统、股票行情更新、在线游戏状态同步等。例如,你可以创建一个Java类,定义一个返回最新消息的方法,然后在dwr.xml中配置该类和方法,使其可以被JavaScript...

    springMVC+dwr技术实现消息推送实例

    在SpringMVC + DWR的组合中,DWR的引擎会在客户端创建一个长连接,当服务器有新消息时,可以通过这个连接直接推送到客户端,更新页面内容。 **实现步骤** 1. **配置DWR:** 首先需要在Web应用的`web.xml`中配置DWR...

Global site tag (gtag.js) - Google Analytics