2.3第一个简单的dwr推送程序
第一步à 将dwr相关的jar包导入到工程
第二步à配置web.xml文件
<!--EndFragment-->
<!--EndFragment-->
<?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>
简明:activeReverseAjaxEnabled变量是设置是否使用dwr推送技术,若设置为true声明为使用,若设置为false,就不好使了。 对于maxWaitAfterWrite变量,一开始我也不知道它是干吗用的。于是我就做了一个小测试,第一次设置maxWaitAfterWrite变量为-1,第二次使用默认值或者使用其它值。有兴趣的读者还可以通过查看dwr的源码来理解maxWaitAfterWrite变量的作用。我们可以在BasePollHandler类里面找到设置maxWaitAfterWrite变量的方法setMaxWaitAfterWrite。
第三步à编写com.im.service.SendPushService类
<!--EndFragment-->
<!--EndFragment-->
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推送技术内容的大部分读者看到上面这段代码的第一反应à什么是ScriptSession,ScriptSession似乎跟HttpSession有什么关系?我的第一反应就是这样,不知道您是否也一样。不用急,我们先把这个HelloWorld程序做完成先,要看到效果才有动力学习嘛!
第四步à 在dwr.xml文件定义向外暴露的接口
<!--EndFragment-->
<!--EndFragment-->
<allow>
<create creator="new" javascript="SendPushService">
<param name="class" value="com.im.service.SendPushService"/>
</create>
</allow>
简明:这是一个把自己编写好的java服务类暴露给客户端直接调用的简单配置方式,对于不熟悉dwr框架的读者,可参看相关的dwr文档,里面有详细的介绍,在此就不用扼要。
第五步: 编写jsp文件.
<!--EndFragment-->
<!--EndFragment-->
<%@ 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>
简明:SendPushService是在第四步里面声明的服务类,在这里已转化为js对象调用,通过src=” dwr/interface/SendPushService.js” 引入;onload事件触发了dwr.engine.setActiveReverseAjax(true)方法,只有激活了这个方法之后,推送才会真正生效,有兴趣的读者不妨一试,去掉onload事件,看看执行效果如何!
细心的读者在第三步会发现Util util = new Util(myScSession);,Util画了一条删除线,因为我使用的是dwr3.0版本,在3.0版本里面新增了一个更好用的类Browser,Util所能实现的功能在Browser类都已实现,官方建议我们使用Browser,所以将Util设置为过期。(设置过期的好处是告诉使用者说我这个类已经过期了,最好不要使用,因为已经有别的类替代它了!为了向后兼容,官方才没把它删除!)
改SendPushService类如下:
public class SendPushService {
ScriptBuffer scriptBuffer = new ScriptBuffer(); //构造js脚本
public void send(String msg){
System.out.println("==========调用了send方法==========");
WebContext webContext=WebContextFactory.get();
final ScriptSession myScSession = webContext.getScriptSession();
scriptBuffer.appendScript("dwrtest(");
scriptBuffer.appendData(msg);
scriptBuffer.appendScript(")");
/**向访问当前页面响应js函数**/
Browser.withCurrentPage(new Runnable() {
public void run() {
myScSession.addScript(scriptBuffer);
}});
}
}
<!--EndFragment-->
<!--EndFragment-->
分享到:
相关推荐
文档记录了dwr相关的配置信息,按照实例即可完成dwr的推送。 解决了ScriptSessionListener 第一次不加载问题,及跨域的修改方式,以及Maven的引入方式
table{border:1px solid gray;} td{width: 10px;height: 10px;border:1px groove gray;text-align: right;padding: 5px;margin: 5px;border-radius: 5px 5px 5px 5px;} button{width: 40px;height: 40px;border-...
打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 ...
主要描述DW项目需求调研方法,并设计调研模式和一些用户引导的提炼
PB90-dw2xls源程序20090504
打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动打印机驱动 HP277dw驱动...
超宽带UWB 5G通信,DW1000芯片 驱动接口代码
最简单的收发程序dw1000_api_rev2p02_dw1000API调用_最简单的收发程序_dw1000.zip
DW是一个前端工具,同时也可以实现一些简单的功能,这里通过js实现简单的计算器功能,代码简单易懂,初学者可以借鉴一下
最简单的收发程序dw1000_api_rev2p02_dw1000API调用_最简单的收发程序_dw1000_源码.zip
mf4800dw mac版打印驱动程序
dw1000官方例程源码
打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机驱动 HP M202DW驱动打印机...
不知道有没有用,自己看看吧。 黄国酬dw2xls源程序
The DW8501 is an instant On/Off LED driver for high power LED applications. At DW8501 output stage, one regulated current port is designed to provide a uniform and constant current sink for driving ...
MTK platform for DW9714 驱动
DW插件之dede
lis2dw12驱动及例子
打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动打印机驱动 HP377dw驱动...