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

来源:互联网 发布:西安智汇诚网络怎么样 编辑:程序博客网 时间:2024/05/16 09:41
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内容,这样的话不会破坏客户端的任何内容。




原创粉丝点击