例子:
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>
分享到:
相关推荐
DWR推送技术的实现主要涉及以下几个关键组件: 1. **DWR Engine**:这是DWR的核心部分,负责处理JavaScript与服务器端Java对象之间的交互。它通过AJAX(Asynchronous JavaScript and XML)技术在客户端和服务器之间...
DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...
在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...
在“dwr推送及js访问java代码”的项目中,我们可以看到如何利用DWR进行双向通信。首先,DWR的核心组件包括`DWR Engine`、`Servlet`和`AutoBean`等。`DWR Engine`负责在客户端和服务器之间建立连接,`Servlet`处理...
在这个实例中,我们可能会看到如何利用DWR的长轮询技术实现简单的消息推送。 3. **Maven工程** 提到"Maven工程"意味着这个示例项目是使用Maven构建的。Maven是Java项目管理工具,它帮助管理项目的依赖关系,构建...
标题中的“dwr推技术官方实例”是指DWR提供的关于其推技术的实际操作示例,这些示例可能涵盖了DWR 2.0.4及以上版本的最新功能。由于高质量的实例资源在网络上可能不易找到,所以这份实例集合显得尤为宝贵。 描述中...
这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...
这两个文件展示了DWR推送的两种不同实现方式。 1. `java-chat.html`:这个例子中,服务器端负责主动推送消息到客户端。在Java后端,开发者需要创建一个`PushEngine`实例,注册监听器,并在有新消息时触发推送。DWR...
推送技术是DWR的一个重要特性,它允许服务器主动将数据推送到客户端,而不是传统的客户端请求-服务器响应模式。这种模式在实时性要求较高的应用中非常有用,比如聊天应用、股票报价或者在线游戏。 在配置文件中,...
通过以上分析,我们可以看出"Dwr推送技术实现BS即时通讯"这个项目涉及到了前端与后端的交互、即时通讯机制、数据存储和安全等多个方面的技术,是一个综合性的Web应用开发实践。通过学习和理解这个项目,开发者可以...
DWR利用Reverse Ajax技术实现服务器向客户端的推送。传统Ajax是客户端发起请求,服务器响应;而Reverse Ajax则是服务器主动向客户端发送数据,无需客户端持续轮询。 2. **心跳机制** 为了保持连接,DWR使用心跳...
这种推送技术在Web应用中非常有用,可以用来更新用户界面而无需手动刷新页面。 首先,我们需要理解DWR的基本工作原理。DWR通过创建JavaScript对象来映射服务器端的Java方法,使得JavaScript可以直接调用这些方法,...
**DWR (Direct Web Remoting) 服务器主动推送示例代码** DWR(Direct Web Remoting)是一个开源的Java库,允许Web应用程序在浏览器和服务器之间进行双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应...
服务器推送技术在DWR中的实现主要通过以下几种方式: - **Polling**:定时轮询是最常见的实现方式,客户端以一定的频率向服务器发送请求,询问是否有新的数据。 - **Reverse Ajax**:DWR支持真正的服务器推送,即当...
下面将详细讲解DWR推送的核心概念和技术。 1. **DWR Push API**: DWR提供了Push API,包括`Push.createChannel()`用于创建推送通道,`Push.send()`用于向通道发送消息,以及`Push.onMessage()`回调函数用于处理接收...
对于不支持的浏览器,可能需要采用其他推送技术或提供降级方案。 5. **性能优化**:由于持久连接可能会占用服务器资源,因此需要适当限制并发连接数量,并优化推送策略,避免不必要的资源浪费。 在提供的压缩包...
通过对这些组件的详细研究,我们可以学习如何在实际项目中利用DWR实现数据推送,包括如何定义和调用远程方法、如何处理推送数据、以及如何优化性能等。这个“dwrdemo”压缩包中的代码示例,将有助于我们深入理解这些...
【基于DWR推送的Web聊天系统】是一种利用Direct Web Remoting (DWR) 技术构建的实时交互式在线聊天应用。DWR是一款开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行直接通信,实现了AJAX(异步...
通过阅读和运行Demo,你可以理解DWR的工作原理,学习如何设置和调用后台方法,以及如何实现消息推送。 总结起来,这个主题涵盖了使用DWR进行JavaScript与Java后台交互的基本步骤,以及利用DWR的Push功能实现消息...
在实现DWR推送时,主要涉及以下几个关键组件和步骤: 1. **DWR配置**:首先,需要在Web应用的`web.xml`配置文件中添加DWR的Servlet配置,这将启用DWR引擎并定义允许访问的类和方法。 2. **Java后端**:创建一个...