除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。
DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码:
新建web工程,这里命名为DwrEg,包结构如下:
web.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>dwr-invoke</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>activeReverseAjaxEnabled</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> -->
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoke</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>client.html</welcome-file>
</welcome-file-list>
</web-app>
dwr.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">
<dwr>
<allow>
<create javascript="myrevsrse" creator="new">
<param name="class" value="com.src.MyReverse"/>
</create>
</allow>
</dwr>
MyReverse.java代码如下:
package com.src;
import java.util.Collection;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class MyReverse {
public void sendMes(String mes){
System.out.println("kao shi si bestllll...");
send("系统消息:"+mes);
}
public void send(final String output) {
org.directwebremoting.WebContext web = WebContextFactory.get();
String page = web.getServletContext().getContextPath()+"/client.html";
Collection sessions = web.getScriptSessionsByPage(page);
System.out.println("size=="+sessions.size());
Util utilAll = new Util(sessions);
utilAll.addFunctionCall("callBack", output); //callBack是client.jsp里面的javascript函数,output是传递过去的参数
//utilAll.setValue("news_id", output, false);
//这种方法也可以,直接将client.html里id为news_id的textarea的值设置为output的值
}
public void noticeNewOrder(int id) {
WebContext wctx = WebContextFactory.get();
ScriptBuffer script = new ScriptBuffer();
script.appendScript("receiveMessages(")
.appendData(id)
.appendScript(");");
ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/DwrEg/client.html");
for (ScriptSession session : pages) {
session.addScript(script);
}
}
}
client.html代码如下:
<html>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<head>
<script type="text/javascript">
function callBack(data){
alert(data);
}
function receiveMessages(id) {
$('orderNotice').innerHTML = "收到id为" + id + "的新订单!";
$('orderNotice').show();
}
</script>
</head>
<body onload="dwr.engine.setActiveReverseAjax(true);">
<textarea rows="20" cols="20" id="news_id"></textarea>
<br />
<div id="orderNotice"></div>
</body>
</html>
推送界面dopush.html的代码如下:
<html>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/myrevsrse.js"></script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function sendnews(){
var new_content = dwr.util.getValue("newcontent");
myrevsrse.sendMes(new_content);
}
function sendinfo(){
myrevsrse.noticeNewOrder(12);
}
</script>
</head>
<body>
<input type="text" name="newcontent">
<input type = "button" value="发消息" onclick="sendnews()"/>
<br />
<input type = "button" value="send 2" onclick="sendinfo()"/>
<br />
</body>
同样,这里的问题也是怎么实现点对点的信息推送,这儿只是实现了向所有的clent.html页面推送信息,以后接着总结。。。。
- 大小: 9.9 KB
分享到:
相关推荐
总结来说,"dwr demo 反向推送 导向推送"是一个演示如何使用DWR实现实时服务器推送的项目,它包括了必要的配置和JavaScript调用,对于理解DWR的工作原理以及在实际项目中应用反向推送技术非常有帮助。通过学习这个...
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
通过学习和研究这个源码,开发者可以了解到如何使用DWR库实现服务器向客户端的实时数据推送,掌握DWR的基本配置和API使用,同时也能理解如何设计和实现一个简单的聊天系统。这对于理解Ajax通信、提升Web开发技能,...
总结来说,DWR推技术是实现服务器主动向客户端推送数据的一种高效方式,尤其适用于需要实时数据更新的应用,如股票实时显示。通过反转Ajax,DWR简化了开发流程,提高了用户体验,是现代Web开发中的一个重要工具。
以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...
这种机制称为反向Ajax或Comet技术,能够实现数据的推送,即服务器主动将数据推送给客户端,而不是等待客户端请求。在聊天应用中,这种功能尤为重要,因为它确保了消息的即时传递。 1. **DWR配置**:在开始之前,...
dwr 框架实现了服务器推技术,使得服务器可以实时推送数据到客户端,实现了实时通信的功能。 七、结论 Java+dwr 框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。该技术的...
在DWR中,可以通过`StreamingUpdateService`来实现流式推送,确保聊天信息的实时性和效率。 **4. 数据加密与持久化** 描述中提到了聊天信息被加密并保存到文本文档中,这涉及到数据安全性和存储。在实际应用中,...
压缩包内的"chat(dwrAjax反转)"文件可能是DWR聊天室的示例,它展示了如何使用DWR的推技术实现一个简单的实时聊天应用。在这个示例中,用户可以通过JavaScript与服务器进行交互,发送消息,同时服务器也能在接收到新...
Spring 和 Direct Web Remoting (DWR) 的整合是将 Spring 框架的依赖注入和控制反转特性与 DWR 的动态 Web 接口相结合,从而实现客户端 JavaScript 和服务器端 Java 代码之间的无缝交互。这种整合使得开发人员可以...
**DWR反转Ajax**是DWR的一个核心特性,它使得开发者可以在服务器端编写业务逻辑,然后直接调用这些逻辑,而无需关心前端如何触发请求。这种模式下,服务器可以主动向客户端推送数据,而不仅是响应客户端的请求,提高...
同时,DWR还支持服务器端反向调用,即服务器可以主动触发前端的JavaScript函数,这对于实时更新、推送通知等场景非常有用。 在提供的压缩包文件列表中: 1. **Spring与DWR集成.doc** - 这可能是一个文档,详细介绍...
这极大地简化了Ajax的使用,并增强了用户体验,因为服务器可以主动推送数据到客户端。 2. **轮询(Polling)**:在实时性要求较高的应用中,DWR支持定时轮询机制,即客户端定期向服务器发送请求,获取最新的数据。...
Comet是Web应用程序中实现服务器向客户端推送数据的一种技术,通常用于构建实时更新的Web应用。在这个示例中,我们将探讨如何结合DWR 3.0和Spring 2.5框架来实现Comet交互。** **1. DWR(Direct Web Remoting)** ...
10. **实时更新(Remote Update)**:DWR的实时更新功能允许服务器主动推送数据到客户端,而无需客户端发起请求,这在实现实时应用时非常有用。 通过"TestDwr"中的示例,你可以看到如何配置DWR,创建可调用的Java服务...
本文将重点介绍基于Java技术栈实现聊天室的方法之一——利用DWR(Direct Web Remoting)技术实现服务器端主动推送数据到客户端的过程。 #### 二、“推”技术概述 在传统的B/S架构中,通常采用的是客户端向服务器...