加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:58:58 所属栏目:百科 来源:网络整理
导读:基于 Java 的成熟的服务器推送框架有 DWR 。 DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许

基于 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/javaee
http://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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读