"DWR消息推送功能实现与配置详解" DWR(Direct Web Remoting)是一种开源JavaScript库,它允许Web应用程序在客户端和服务器之间进行实时通信,而无需刷新整个页面。DWR的其中一个特性是支持消息推送功能,即服务器能够主动向客户端发送数据,实现类似WebSocket的实时交互体验,但基于HTTP协议。 在传统的HTTP请求中,客户端需要不断地发起请求来获取服务器的更新,这种方式被称为"轮询",效率较低且浪费资源。DWR的消息推送功能则通过"Comet"技术,使得服务器可以在适当的时候向客户端推送数据,显著提高了交互的即时性。 要实现DWR的消息推送功能,首先需要在项目中引入DWR库,并进行相应的配置。在`web.xml`文件中,我们需要定义一个名为`dwr-invoke`的Servlet,该Servlet由DWR的`DWRServlet`类提供。配置示例如下: ```xml <web-app version="2.5"> <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> </servlet> <servlet-mapping> <servlet-name>dwr-invoke</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> </web-app> ``` 这里的`activeReverseAjaxEnabled`参数设置为`true`,表示启用了DWR的反向AJAX(即服务器到客户端的推送)功能。 接下来,你需要在服务器端创建Java类,并使用DWR的注解或XML配置暴露这些类和方法给客户端调用。例如,你可以使用`@RemoteProxy`注解标记一个类,使其可以被JavaScript访问: ```java import uk.org.webcompere.systemstubs.annotation.RemoteProxy; @RemoteProxy public class MyService { public String sendMessage(String message) { // 处理并返回消息 } } ``` 在客户端,你可以使用DWR提供的JavaScript API来订阅服务器推送的消息。首先,通过`DWREngine.initialize()`初始化DWR引擎,然后注册回调函数来接收服务器推送的数据: ```javascript DWREngine.initialize(); function handleMessage(message) { // 处理接收到的消息 } DWREngine.setUpdateCallback(function() { // 检查是否有新消息 var myService = DWREngine.create('MyService'); myService.sendMessage(null, handleMessage); }); ``` 这样,当服务器端的`sendMessage`方法被调用时,DWR会自动将结果推送到客户端的`handleMessage`函数中,实现消息的实时推送。 DWR的推送功能不仅可以用于简单的消息传递,还可以应用于实时聊天、股票行情更新、在线协作等场景。由于DWR是基于HTTP的,因此它不需要额外的服务器支持,如WebSocket,但这也意味着其推送效率和性能可能不如专门设计的WebSocket解决方案。然而,对于许多只需要基本推送功能的项目,DWR提供了一种简单易用的解决方案。
提取到的知识点是
dwr消息推送、apache集群、负载均衡
http://tonl.iteye.com/blog/1399027
使用DWR反转实现信息推送(一)
除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。
DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码:
新建web工程,这里命名为DwrEg,包结构如下:
web.xml代码如下:
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代码 收藏代码
<?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代码如下:
Java代码 收藏代码
package com.src;
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 深入理解23种设计模式
- 制作与调试:声控开关电路详解
- 腾讯2008年软件开发笔试题解析
- WebService开发指南:从入门到精通
- 栈数据结构实现的密码设置算法
- 提升逻辑与英语能力:揭秘IBM笔试核心词汇及题型
- SOPC技术探索:理论与实践
- 计算图中节点介数中心性的函数
- 电子元器件详解:电阻、电容、电感与传感器
- MIT经典:统计自然语言处理基础
- CMD命令大全详解与实用指南
- 数据结构复习重点:逻辑结构与存储结构
- ACM算法必读书籍推荐:权威指南与实战解析
- Ubuntu命令行与终端:从Shell到rxvt-unicode
- 深入理解VC_MFC编程:窗口、类、消息处理与绘图
- AT89S52单片机实现的温湿度智能检测与控制系统