今天无意间看到了一篇关于dwr的文章,讲的是反向Ajax,想了想半年前一个项目的功能需求如果用它实现就太完美了。
项目要求是:数据库中A表中如果有了新的数据,系统的管理界面上要实时的显示出来,提醒给操作人员(是某种报警信息,好像特别重要)。
当时的实现方法是:让一Iframe里的页面每隔多少秒就刷新一次,来监视数据库A表的变化。这样客户端不断地向服务发送请求,服务器被动的返回客户端想要的数据。
反向Ajax技术是服务器向客户端主动的发关数据,很大的减少了服务的负担。
学习新的知识点就要多写些自己的Demo,在这里写一个最简单的例子,以作笔记:
sendMsg.jsp负责向表中添加数据(更新数据库),showMsg.jsp用来实时显示前者添加的信息。
dwr.xml
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr//dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="SendMsg" scope="session">
<param name="class" value="com.dwr.bean.SendMsg" />
</create>
</allow>
</dwr>
SendMsg.java
package com.dwr.bean;
import java.util.Collection;
import java.util.LinkedList;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
/**
* DWR反向Ajax示例
* @author ︶ㄣ旺 http://syw.35free.net
* @version 1.0
* */
public class SendMsg
{
public static WebContext wctx = null;
//用一个List代表数据库 来储存消息
private LinkedList list = new LinkedList();
//调用添加和显示方法
public void sendMsg(String msg)
{
list.addFirst(msg);
//最多保留10条聊天记录
if(list.size()>10){
list.removeLast();
}
wctx = WebContextFactory.get();
Util utilThis = new Util(wctx.getScriptSession());
//使用utilThis重置 Id 属性为 msg 的文本框的内容
utilThis.setValue("msg", "请输入信息");
String currentPage = "/login/chat1.jsp"; //要推信息的页面地址
//获得所有已经打开此页面的会话
Collection sessions = wctx.getScriptSessionsByPage(currentPage);
Util utilAll = new Util(sessions);
//将消息从LinkedList中取出来,放放到一个字符串数组中
//在这里遇到一个问题,就是直接用String[] msgs = (String[])list.toArray();时,报类型转换错误
//但如下,给toArray()方法传递一个空的数组就不报错了,求解中....
String[] msgs = new String[list.size()];
msgs = (String[]) list.toArray(msgs);
//先清空页面的消息内容,去除ul元素下所有元素
utilAll.removeAllOptions("ul");
//向页面添加消息内容
utilAll.addOptions("ul", msgs);
}
}
sendMsg.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>DWR反向Ajax示例</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/SendMsg.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>
<script type="text/javascript">
function sendMessage()
{
var msg = $("msg").value;
SendMsg.sendMsg(msg);
}
</script>
</head>
<body>
DWR反向Ajax示例信息添加<br>
输入信息:<input type="text" id="msg" name="msg" onkeypress="dwr.util.onReturn(event,sendMessage)">
</body>
</html>
showMsg.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>DWR反向Ajax示例</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script>
<script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script>
</head>
<body onload="dwr.engine.setActiveReverseAjax(true);">
DWR反向Ajax示例信息显示<br>
ul:
<ul id="ul">
</ul>
</body>
</html>
运行效果如图:
这时showMsg.jsp一直处于失去焦点状态,却能实时地显示服务器端更新的数据
- 大小: 33.5 KB
分享到:
相关推荐
DWR(Direct Web Remoter)是一个开源JavaScript库,它提供了反向Ajax的支持。启用DWR的反向Ajax功能只需在`web.xml`的DWRServlet配置中添加初始化参数`activeReverseAjaxEnabled`并设置其值为`true`。 反向Ajax的...
**反向Ajax(Reverse Ajax)**,又称为**Comet技术**,是Web开发中的一种创新方式,主要用于实现服务器向客户端的实时数据推送。在传统的Ajax应用中,主要是客户端通过JavaScript向服务器发送异步请求,获取数据并...
DWR(Direct Web Remoting)是一种Java库,它允许Web应用程序实现实时的双向通信,即反向Ajax。反向Ajax是指服务器能够主动地向客户端浏览器推送数据,而不仅仅是响应客户端的请求。DWR提供了三种反向Ajax技术,分别...
dwr实现的在线即时聊天demo,比较简化的一个反向ajax例子, <br>everse Ajax主要是在BS架构中,从服务器端向多个浏览器主动推数据的一种技术。它的一种实现就是客户端向服务器请求后,服务器不立即回应,从而导致一...
Direct Web Remoting (DWR) 是一个开源Java库,它允许在浏览器和服务器之间进行安全、高效的异步通信,即所谓的“反向AJAX”或“Comet”技术。DWR使得JavaScript能够调用服务器端的Java方法,就像它们是本地函数一样...
在《基于J2EE的Ajax宝典》中,可能会详细讲解如何使用DWR来创建一个反向Ajax聊天室。首先,你需要设置DWR配置,包括在Web应用的WEB-INF目录下创建dwr.xml文件,定义允许的Java方法供JavaScript调用。接着,你会在...
在反向Ajax聊天实例中,DWR可能负责创建一个服务器端的监听器,当有新消息时,通过DWR API向所有连接的客户端发送更新。 4. 实例代码分析: - `*.java`文件:这些可能是Java类,包括聊天服务端的处理逻辑,如用户...
dwr comet 反向ajax实力 直接抛 我打了一个包, 放到Tomcat,jetty下面就能直接跑了 很方便 还有注视 对新手 。。。。很好的
如果你还是停留在原来的ajax层面的话,这次绝对让你眼前一亮。绝对不贵哦,大家下了就知道了... DWR出2.0版了,其中最大的亮点就是Reverse Ajax技术!传统的浏览器发起请求服务器返回响应,而现在通过反向ajax可以由...
MyBatis反向工程是数据库建模到代码生成的一种实用工具,它可以帮助开发者自动生成Java实体类、Mapper接口以及XML配置文件,极大地提高了开发效率。本Demo将展示如何使用MyBatis Generator(MBG)来实现这一过程。 ...
总之,Swift的Closure闭包为我们提供了一种灵活且高效的方式,能够在多个视图控制器之间传递数据,特别是在需要反向传值的场景下。通过理解闭包的工作原理和使用技巧,开发者能够更好地利用Swift的强大功能,创建出...
Block反向传值在iOS开发中是一种常见的编程技巧,...这个Demo可能包含了一个简单的界面,用户输入数据后,通过点击按钮触发Block反向传值的过程,将结果显示在界面上。这样的实践将有助于加深你对Block反向传值的理解。
它允许JavaScript在客户端与服务器端的Java对象之间进行直接调用,无需刷新页面,从而实现了所谓的“反向Ajax”或者“富互联网应用”(RIA)的功能。本课件主要涵盖了DWR的基本用法和常见操作,包括数据类型的处理、...
【反向Ajax技术】是Web开发中的一个重要概念,它是在传统Ajax技术的基础上发展起来的,主要解决了传统Ajax技术无法实现实时性较高场景的问题。传统Ajax技术是客户端发起请求,服务器响应并返回数据,而反向Ajax则是...
java 反向代理demo
就业班时,就业老师整理的关于 Ajax的面试笔记,里边含有javaScript基础加强, Ajax编程入门,jQuery框架等一些核心资料。 核心内容概述 1.JavaScript加强,涉及到ECMAScript语法、BOM对象、DOM...7.反向Ajax编程(彗星)
demo主要运用SSM框架完成用户的登录功能;demo集成了MyBatis反向生成工程;demo的后台运用了spring的自动注入、springMVC的请求驱动、MyBatis面向接口数据库编程技术;JSP前台和后台交互的响应模式;
**DWR (Direct Web Remoting) 是一个开源的Java库,允许Web应用程序在客户端和服务器之间进行实时的、异步的通信。它通过JavaScript API在浏览器端与Java方法交互,从而实现了Reverse Ajax(也称为Comet技术),即...