`
5211422
  • 浏览: 209821 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dwr推送技术学习

阅读更多

例子:

 

web.xml文件配置:

          <servlet>
 <servlet-name>dwr-invoker</servlet-name>
 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 <init-param>
  <param-name>debug</param-name>
  <param-value>true</param-value>
 </init-param>
 
 <!-- DWR默认采用piggyback方式 -->
 
 <!-- 使用polling和comet的方式 -->
 <init-param>
  <param-name>pollAndCometEnabled</param-name>
  <param-value>true</param-value>
 </init-param>
 
 <!-- comet方式 -->
 <!--
 <init-param>
  <param-name>activeReverseAjaxEnabled</param-name>
  <param-value>true</param-value>
 </init-param>
  -->
 
 <!-- polling方式:在comet方式的基础之上,再配置以下参数 -->
 <!--
 <init-param>
  <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
  <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
 </init-param>
  -->
  
 <!-- 毫秒数。页面默认的请求间隔时间是5秒 -->
 <!--
 <init-param>
  <param-name>disconnectedTime</param-name>
  <param-value>60000</param-value>
 </init-param>
  -->
 
 <load-on-startup>1</load-on-startup>     
</servlet>

<servlet-mapping>
 <servlet-name>dwr-invoker</servlet-name>
 <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

 

java方法:

 

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.concurrent.locks.ReentrantLock;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.proxy.dwr.Util;

import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;

 

private static LinkedList<Message> messages = new LinkedList<Message>();
 private static ReentrantLock lock = new ReentrantLock(); //JDK5锁
 
 public void addMessage(String text){
  System.out.println("---------");
  try{
   lock.lock();
   
   if(text!=null && text.trim().length()>0){
    messages.addFirst(new Message(text));
    if(messages.size()>10){
     messages.removeLast();
    }
   }
  }catch(Exception ex){
   ex.printStackTrace();
  }finally{
   lock.unlock();
  }
  System.out.println("----1-----");
  //获得DWR上下文
  WebContext webContext = WebContextFactory.get();
  System.out.println("----2-----");
  //获取当前页面URL,比如/ext3/test_tag.jsp
  String currentPage = webContext.getCurrentPage();
  System.out.println("----3-----");
  //当前脚本sessin
  ScriptSession scriptSession = webContext.getScriptSession();
  System.out.println("-----4----");
  //设置页面控件的值
  Util util = new Util(scriptSession);
  util.setValue("text", ""); //这里是清空页面输入框的值
  System.out.println("----5-----");
  //设置脚本sessin的属性值
  scriptSession.setAttribute("uid", "cjm");
  System.out.println("------6---");
  //获取脚本session的属性值
  for(Iterator it=scriptSession.getAttributeNames();it.hasNext();){
   String attrName = (String)it.next();
   System.out.println(attrName + "=" + scriptSession.getAttribute(attrName));
  }
  System.out.println("----7-----");
  //获取所有浏览当前页面的脚本session
  Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(currentPage);
  System.out.println("----8-----");
  Util utilAll = new Util(sessions);
  System.out.println("-----9----");
  //执行客户端脚本
  ScriptBuffer script = new ScriptBuffer();
  script.appendScript("clientFunction(")
    .appendData(scriptSession.getAttribute("uid"))
    .appendScript(");");
  System.out.println("----10-----");
  for(ScriptSession session: sessions){
   session.addScript(script);
  }
  System.out.println("----11-----");
  //更新这些脚本session的一些元素
  utilAll.removeAllOptions("messages");
  utilAll.addOptions("messages", messages, "id", "text");
 }

 

jsp页面:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.zzst.application.meeting.util.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'ajax0729.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH%>/dwr/engine.js'> </script>
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH%>/dwr/util.js'> </script>
  <script type='text/javascript' src='<%=MeetingConfig.CONTENT_PATH %>/dwr/interface/DwrMethod.js'></script>
  </head>
  <body onload="dwr.engine.setActiveReverseAjax(true);sendMessage();">
    <p>输入信息: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" />
 <input type="button" value="Send" onclick="sendMessage()" /></p>
 <script type="text/javascript">
     function sendMessage() {
        DwrMethod.addMessage(dwr.util.getValue("text"));
     }
     function clientFunction(returnStr){
      //document.all.view.value="已经广播给所有看到这个页面的用户了"+returnStr
     }
 </script>
 <input id="view">
 <hr/>
 <select id="messages"></select>
  </body>
</html>

分享到:
评论
2 楼 Mr_Monotony 2012-10-09  
为什么我按照这个写了不行啊?。。 只有自己才能看到信息。 而且看代码好像存取的都是session的范围。 每个用户都有不同的Session。 如果用application的话到是可以吧。  求指教。 求讲解。。
1 楼 不过是过客 2011-10-14  
太厉害了,IE上推送有问题,到处找,看到大哥这个试了一盘,没问题了!

相关推荐

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

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

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

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

    dwr推送技术

    在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...

    dwr推送及js访问java代码

    在“dwr推送及js访问java代码”的项目中,我们可以看到如何利用DWR进行双向通信。首先,DWR的核心组件包括`DWR Engine`、`Servlet`和`AutoBean`等。`DWR Engine`负责在客户端和服务器之间建立连接,`Servlet`处理...

    DWR消息推送简单实例

    在这个实例中,我们可能会看到如何利用DWR的长轮询技术实现简单的消息推送。 3. **Maven工程** 提到"Maven工程"意味着这个示例项目是使用Maven构建的。Maven是Java项目管理工具,它帮助管理项目的依赖关系,构建...

    dwr推技术官方实例

    标题中的“dwr推技术官方实例”是指DWR提供的关于其推技术的实际操作示例,这些示例可能涵盖了DWR 2.0.4及以上版本的最新功能。由于高质量的实例资源在网络上可能不易找到,所以这份实例集合显得尤为宝贵。 描述中...

    dwr demo 反向推送 导向推送

    这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...

    dwr 推送例子,CHAT

    这两个文件展示了DWR推送的两种不同实现方式。 1. `java-chat.html`:这个例子中,服务器端负责主动推送消息到客户端。在Java后端,开发者需要创建一个`PushEngine`实例,注册监听器,并在有新消息时触发推送。DWR...

    Dwr 推送简单列子

    推送技术是DWR的一个重要特性,它允许服务器主动将数据推送到客户端,而不是传统的客户端请求-服务器响应模式。这种模式在实时性要求较高的应用中非常有用,比如聊天应用、股票报价或者在线游戏。 在配置文件中,...

    Dwr推送技术实现BS即时通讯

    通过以上分析,我们可以看出"Dwr推送技术实现BS即时通讯"这个项目涉及到了前端与后端的交互、即时通讯机制、数据存储和安全等多个方面的技术,是一个综合性的Web应用开发实践。通过学习和理解这个项目,开发者可以...

    dwr消息推送完整示例

    DWR利用Reverse Ajax技术实现服务器向客户端的推送。传统Ajax是客户端发起请求,服务器响应;而Reverse Ajax则是服务器主动向客户端发送数据,无需客户端持续轮询。 2. **心跳机制** 为了保持连接,DWR使用心跳...

    dwr java推送例子 免积分

    这种推送技术在Web应用中非常有用,可以用来更新用户界面而无需手动刷新页面。 首先,我们需要理解DWR的基本工作原理。DWR通过创建JavaScript对象来映射服务器端的Java方法,使得JavaScript可以直接调用这些方法,...

    dwr spring服务器主动推送示例代码

    **DWR (Direct Web Remoting) 服务器主动推送示例代码** DWR(Direct Web Remoting)是一个开源的Java库,允许Web应用程序在浏览器和服务器之间进行双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应...

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

    服务器推送技术在DWR中的实现主要通过以下几种方式: - **Polling**:定时轮询是最常见的实现方式,客户端以一定的频率向服务器发送请求,询问是否有新的数据。 - **Reverse Ajax**:DWR支持真正的服务器推送,即当...

    dwr单点推送

    下面将详细讲解DWR推送的核心概念和技术。 1. **DWR Push API**: DWR提供了Push API,包括`Push.createChannel()`用于创建推送通道,`Push.send()`用于向通道发送消息,以及`Push.onMessage()`回调函数用于处理接收...

    dwr 消息推送

    对于不支持的浏览器,可能需要采用其他推送技术或提供降级方案。 5. **性能优化**:由于持久连接可能会占用服务器资源,因此需要适当限制并发连接数量,并优化推送策略,避免不必要的资源浪费。 在提供的压缩包...

    DWR数据推送封装的demo

    通过对这些组件的详细研究,我们可以学习如何在实际项目中利用DWR实现数据推送,包括如何定义和调用远程方法、如何处理推送数据、以及如何优化性能等。这个“dwrdemo”压缩包中的代码示例,将有助于我们深入理解这些...

    基于DWR推送的web聊天系统

    【基于DWR推送的Web聊天系统】是一种利用Direct Web Remoting (DWR) 技术构建的实时交互式在线聊天应用。DWR是一款开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行直接通信,实现了AJAX(异步...

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

    通过阅读和运行Demo,你可以理解DWR的工作原理,学习如何设置和调用后台方法,以及如何实现消息推送。 总结起来,这个主题涵盖了使用DWR进行JavaScript与Java后台交互的基本步骤,以及利用DWR的Push功能实现消息...

    dwr简单推送例子

    在实现DWR推送时,主要涉及以下几个关键组件和步骤: 1. **DWR配置**:首先,需要在Web应用的`web.xml`配置文件中添加DWR的Servlet配置,这将启用DWR引擎并定义允许访问的类和方法。 2. **Java后端**:创建一个...

Global site tag (gtag.js) - Google Analytics