用dwr框架实现Web端服务器推送

来源:互联网 发布:移动网络改成电信 编辑:程序博客网 时间:2024/04/29 00:03

基于 Java 的成熟的服务器推送框架有 DWR 。

DWR是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个 DWR servlet以及 JavaScript库。虽然 DWR不是 Java平台上唯一可用的Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。从最简单的角度来说,DWR是一个引擎,可以把服务器端Java对象的方法公开给JavaScript 代码。使用DWR 可以有效地从应用程序代码中把Ajax的全部请求 -响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet代码把 Ajax请求调整成对 Java域对象的调用。

DWR 从 2.0开始增加了 push 功能 , 也就是在异步传输的情况下可以从 Web-Server 端发送数据到 Browser

一个简单的dwr推送程序

第一步 将dwr相关的jar包导入到工程

第二步 配置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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!-- 设置是否允许使用dwr推送技术 --><init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></init-param><init-param><param-name>maxWaitAfterWrite</param-name><param-value>-1</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></web-app>


第三步编写com.im.service.SendPushService类

public class SendPushService {//发送消息public void send(String msg) {System.out.println("==========调用了send方法==========");ScriptBuffer scriptBuffer = new ScriptBuffer(); //构造js脚本WebContext webContext=WebContextFactory.get();ScriptSession myScSession = webContext.getScriptSession();scriptBuffer.appendScript("dwrtest(");scriptBuffer.appendData(msg);scriptBuffer.appendScript(")");Util util = new Util(myScSession);util.addScript(scriptBuffer); //向客户端推送消息}}


第四步 dwr.xml文件定义向外暴露的接口

<allow><create creator="new" javascript="SendPushService"><param name="class" value="com.im.service.SendPushService"/></create></allow>


第五步: 编写jsp文件.

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns=" http://www.w3.org/1999/xhtml"><head><base href="${basePath }" /><script type='text/javascript' src='${basePath}dwr/engine.js'></script><script type='text/javascript' src='${basePath}dwr/util.js'></script><script type='text/javascript' src='${basePath}dwr/interface/SendPushService.js'></script><script type="text/javascript">function hello(){SendPushService.send("第一个dwr推程序");}/**由dwr在后台调用这个方法**/function dwrtest(data){alert(data);}</script><title>第一个dwr推程序</title></head><body onload="dwr.engine.setActiveReverseAjax(true);"><input type="button" value="点击我" onclick="hello();" /></body></html>