1、首先要下载dwr 3.0 地址 http://directwebremoting.org/dwr/download.html
2、在web.xml中加入dwr的servlet和相关配置
<!--dwr servlet-->
<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>
<init-param>
<param-name>pollAndCometEnabled</param-name>
<param-value>true</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>
pollAndCometEnabled是指dwr 的reverse ajax是使用polling 和comet的方式,在这个例子中可以明显地从页面上看出来是用的polling+comet
附:关于reverse-ajax的实现有3种方式
polling 就是隔一段时间向服务器发送一request来检查服务端是否有数据更新
comet 就是一个长http请求,在请求期间服务端可以向客户端push数据,但是这种做法要求server和brower长期建立一个通信通道,而且效率很低
piggyback 就是服务端的更新数据都在排队等待,等到下一次有请求过来,那么这些等待更新数据就伴随这次请求一起发送到brower
有关更详细的reverse-ajax技术介绍可以参考http://getahead.org/dwr/reverse-ajax
3、创建一个dwr.xml,用于配置你要制定的java代码映射类,以及允许使用的方法和converter
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="DWRHelper">
<param name="class" value="com.cloverworxs.uma.helper.DWRHelper" />
<include method="addMessage" />
</create>
<convert converter="bean" match="com.cloverworxs.uma.helper.Message">
<param name="include" value="id,text" />
</convert>
</allow>
</dwr>
create是只一个java的js映射,其中include是可以在js使用的方法
convert 是指对应js到java,或者java到js的对象转换,其中include是可以转换的属性
4、写服务段的java代码
DWRHelper
package com.cloverworxs.uma.helper;
import java.util.Collection;
import java.util.LinkedList;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class DWRHelper {
public void addMessage(String text,String name) {
String tempStr = name+"说:"+text;
LinkedList messages = new LinkedList();
if (text != null && text.trim().length() > 0) {
messages.addFirst(new Message(tempStr));
//messages.addLast(new Message(text));
while (messages.size() > 10) {
messages.removeLast();
}
}
// Reverse Ajax code to be added here shortly
WebContext wctx = WebContextFactory.get();
String currentPage = wctx.getCurrentPage();
// Clear the input box in the browser that kicked off this page only
Util utilThis = new Util(wctx.getScriptSession());
utilThis.setValue("text", "");
// For all the browsers on the current page:
Collection sessions = wctx.getScriptSessionsByPage(currentPage);
Util utilAll = new Util(sessions);
// Clear the list and add in the new set of messages
utilAll.removeAllOptions("chatlog");
utilAll.addOptions("chatlog", messages, "text");
}
}
Message
package com.cloverworxs.uma.helper;
import org.directwebremoting.Security;
public class Message {
public Message(String newtext) {
text = newtext;
if (text.length() > 256) {
text = text.substring(0, 256);
}
text = Security.replaceXmlCharacters(text);
}
public long getId() {
return id;
}
public String getText() {
return text;
}
private long id = System.currentTimeMillis();
private String text;
}
5、到此为止可以写页面代码了,下面的代码html或者jsp都可以
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<h1>Java Chat</h1>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<script type='text/javascript' src='dwr/interface/DWRHelper.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<p>This is a very simple chat demo that uses reverse ajax to collect messages and server-side browser manipulation to update the pages with the results.</p>
<p>Your Name:<input id="username" type="text"/></p>
<p>Your Message: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" />
<input type="button" value="Send" onclick="sendMessage()" />
</p>
<script type="text/javascript">
function sendMessage() {
//alert(dwr.util.getValue("text"));
DWRHelper.addMessage(dwr.util.getValue("text"),document.getElementById("username").value);
}
</script>
<hr />
<ul id="chatlog" style="list-style-type:none;">
</ul>
</body>
</html>
页面代码简单吧,只有方法调用,没有任何获得返回数据,和对回传数据处理的代码
注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
这个是要在使用reverse-ajax的页面必须的!
6.同时打开两个浏览器,都访问jsp页面,就可以互相聊天了。
现在可以启动应用体检一把reverse-ajax,希望你能和我有一样的惊奇感觉
当然,肯定有人会说这种功能用普通的ajax也可以实现啊,为什么要用reverse-ajax
这时候你就要考虑这种情况了,有用户A和用户B同时在发Message,A正在看message没有任何request动作,而B发了一条新message,这时要求这个信息要展现给A看,那么普通的ajax可以处理这种功能吗?这就是reverse-ajax的用途,可以从服务段向brower下推信息 .
文字转载自:http://blog.sina.com.cn/s/blog_5bd96d520100gau4.html
分享到:
相关推荐
压缩包内的"chat(dwrAjax反转)"文件可能是DWR聊天室的示例,它展示了如何使用DWR的推技术实现一个简单的实时聊天应用。在这个示例中,用户可以通过JavaScript与服务器进行交互,发送消息,同时服务器也能在接收到新...
这个"DWR 推送例子, CHAT"是演示如何利用DWR实现双向通信,创建一个实时聊天应用的示例。下面将详细解释DWR的核心概念以及这个CHATDEMO的工作原理。 首先,理解DWR的基本工作方式非常重要。DWR通过在服务器端运行的...
DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。当这些方法被调用时,DWR会处理网络通信细节,使得JavaScript可以直接与服务器上的Java代码进行交互。同时,DWR还...
- **事件处理**:在客户端,通常会有一个事件监听器来捕获来自DWR的推送消息,并在界面上显示新消息。 - **用户认证与会话管理**:为了保证安全性,聊天应用通常需要用户认证。DWR可以集成Spring Security等框架进行...
通过以上步骤,你可以在MyEclipse中成功搭建一个DWR推送的例子,体验到DWR带来的便捷性和实时性。在实际开发中,还可以结合其他前端框架,如jQuery或AngularJS,进一步提升用户体验。同时,注意对DWR的安全性进行...
总的来说,这个"DWR Java推送例子 免积分"提供了一个学习和实践DWR实时推送功能的机会,特别适合那些希望在Web应用中实现即时通信功能的开发者。通过理解并实践这个例子,你可以更好地掌握DWR的使用,以及如何在不...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java代码进行交互,从而实现动态、实时的Web应用程序。DWR使得开发者能够轻松地在客户端和服务器之间传递数据,而无需手动...
DWR通过在浏览器和服务器之间建立一个持久连接,使得服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种技术通常被称为Comet或长轮询,是实现服务器推的关键。 在开始DWR的实战之前,确保你的项目...
本实例将通过一个点对点聊天功能的实现,深入探讨DWR的推技术。 ### DWR基础 1. **反向Ajax(Reverse Ajax)**:DWR的核心功能之一是实现反向Ajax,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求...
DWR是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
在这个"第一个DWR HelloWorld例子"中,我们将深入理解DWR的基本原理和操作流程,通过实践来学习如何搭建一个简单的DWR应用。 1. **DWR的基本概念** DWR的核心思想是创建一个安全的、高效的、易于使用的AJAX框架。...
在创建一个DWR反推例子时,你需要遵循以下步骤: 1. **配置DWR**:在你的项目中,你需要创建一个名为`dwr.xml`的配置文件,用于定义DWR允许暴露给JavaScript的Java类和方法。例如,你可以将一个名为`MyService`的类...
本"dwrd 推技术 demo"显然是一个用于展示DWR实时推送功能的示例项目。 1. **DWR框架核心概念**: - **Reverse AJAX**:DWR的核心特性之一就是反向AJAX,即服务器可以主动向客户端发送数据,而不仅仅是响应客户端的...
这个"**dwr简单推送例子**"是一个示例项目,旨在展示如何利用DWR实现服务端向客户端的实时数据推送功能,这是Web应用中实现即时更新、实时聊天或通知的关键技术。 DWR的核心功能是通过AJAX(Asynchronous ...
在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...
DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...
在描述中提到的案例是一个使用DWR构建的广播或群聊系统。DWR的实时更新能力使其非常适合用于构建这样的系统。通过DWR的Push技术,服务器可以主动向客户端推送消息,而不仅仅是响应客户端的请求。这种模式在群聊系统...
- ** Comet**:DWR也支持Comet技术,这是一种模拟服务器推送的技术,通过长时间保持一个HTTP连接来实现,直到服务器有数据时才关闭连接并发送更新。 在实际应用中,使用DWR服务器推送的例子可能包括实时聊天系统、...
在描述中提到的"DWR服务器推技术整合Struts2",意味着我们将DWR与流行的MVC框架Struts2相结合,以创建一个具有聊天功能的Web应用。Struts2提供了一个强大的架构来处理HTTP请求,并结合DWR,可以创建一个动态的、交互...
这个"学习dwr的一个例子"是一个实践教程,可能包含了如何设置DWR环境、创建远程Java对象、调用这些对象的方法以及处理返回的数据等步骤。 1. **DWR简介**:DWR的核心功能是通过AJAX技术实现浏览器与服务器之间的...