DWR高级主题之反向Ajax(轮询模式--DWR2.X)

DWR高级主题之反向Ajax(轮询模式--DWR2.X)
----------

使用DWR实现反向Ajax轮询模式的第一步是,使用一些新的配置元素。首先,在web.xml文件中,需要添加DWRServlet的一些新的初始化参数

<init-param>
    <param-name>activeReverseAjaxEnabled</param-name>
    <param-value>true</param-value>
</init-param>
<init-param>
    <param-name>org.directwebremoting.extend.ServerLoadMonitor<param-name>
    <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
第一个参数是两种主动式反向Ajax所必须添加的参数,第二个参数只有轮询模式所必须的。轮询模式的 轮询频率默认是5秒,但我们还可以再加一个参数进行定制,如:
<init-param>
  <param-name>disconnectedTime</param-name>
  <param-value>6000</param-value>
</init-param>
这里,我们把轮询的频率设置为6秒了。
假设你使用一个名为disconnectedTime的参数,但是由于2.0.2版本之前的DWR存在一个错误,因此必须使用timeToNextPoll,如例:
<init-param>
    <param-name>timeToNextPoll</param-name>
    <param-value>1000</param-value>
</init-param>
如果我们使用了2.0.2之后版本,可能不再需要使用这个参数了(未测试)。
除了上述配置,为启用反向Ajax,页面上还需要一些javascript代码,其实也很简单,即:
dwr.engine.setActiveReverseAjax(true);
只需要上述代码和web.xml文件中的配置,就可以激活反向Ajax了。如果把反向Ajax添加到已有的DWR web应用程序中并激活它,然后使用Firefox访问它,并查看Firebug控制台,就会注意到每秒都会发出一个新的清求,看看,这就是轮询!
另外一个需要关注的地方是如何真正处理这些轮询请求。通常是 在服务器端编写一些代码,以更新附加到服务器端的每个客户端的会话。DWR会记录与之联系的每个客户端,分别存储每个客户端的会话。这一点与通常的HTTP会话不同。借助于此,可以调用javascript代码,下一个轮询请求会通知这些调用。下面是代码范例:
String currentPage = wContext.getCurrentPage();
Collection sessions = wContext.getScriptSessionsByPage(currentPage);
Util utilAll = new Util(sessions);
utilAll.setValue("divTest",d.toString(),true);
一旦获得当前页面的名称(DWR知道),就可以获取当前连接到这个页面的所有会话列表。然后,可以获取Util类的一个实例,这个实例是DWR中自己的java代码和客户端javascript代码之间的主要交互点。给这个实例转入一个会话列表,就可以与各个会话进行交互,无须使用集合迭代处理等手段。 Util类有很多很方便的方法,其中一个是setValue()。这个方法类似于在客户端执行:
document.getElementById("divTest").innerHTML = "";
但是它会关注一些细节,比如目标元素是文本框或者其他元素。在此,使用所记录的Date域的当前值来更新divTest的内容。将 第三个参数设为true,可以指定任何HTML内容,这样的话不会破坏客户端的任何内容。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值