DWR高级主题之反向Ajax(DWR3的轮询模式演示1)

来源:互联网 发布:信捷plc模拟量编程实例 编辑:程序博客网 时间:2024/05/16 10:58
DWR高级主题之反向Ajax(DWR3的轮询模式演示1)
----------

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><display-name>firstDWR</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><!-- The DWR Servlet... --><servlet><display-name>DWR Servlet</display-name><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!-- 初始化参数,增加调试功能 --><init-param><param-name>debug</param-name><param-value>true</param-value></init-param><!-- 跨域调用配置信息,不是必须的 --><init-param><param-name>crossDomainSessionSecurity</param-name><param-value>false</param-value></init-param><!-- 下面是轮询模式的反向Ajax所需要的参数 --><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><!-- 设置轮询的频率为6秒 --><init-param><param-name>disconnectedTime</param-name><param-value>6000</param-value></init-param></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping></web-app>

dwr.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"><dwr><allow><create creator="new" javascript="MathDelegate"><param name="class" value="app.MathDelegate" /></create></allow></dwr>

java文件

package app;import org.directwebremoting.Browser;import org.directwebremoting.ScriptSessions;public class MathDelegate {private static int num = 1;/** * 推送数字到页面上去 *  * @param userid * @param request * @return */public void dwrHandle() {Browser.withAllSessions(new Runnable() {public void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// funA为页面上一个js函数,num++为funA的参数ScriptSessions.addFunctionCall("funA", num++);}});}public void handle() throws InterruptedException{int m = 0;while(m++ < 10){Thread.sleep(3000);dwrHandle();}}}

index.html

<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><title>firstdwr</title><script type="text/javascript" src="dwr/engine.js"></script><!-- 注意:反向Ajax中,util.js是必须包含的 --><script type="text/javascript" src="dwr/util.js"></script><script type="text/javascript" src="dwr/interface/MathDelegate.js"></script><script><!--  轮询模式与comet模式的反向Ajax所需要的配置 -->dwr.engine.setActiveReverseAjax(true);<!-- //重点关于解决页面每刷新一次会多创建一个新的ScriptSession的解决方法//由于ScriptSession的创建机制不同于HttpSession,它会在每次页面刷新的时候都会重新创建,而销毁机制却是失去连接//或者失效之后一定时间才会自动销毁,这样就可能造成服务端可能就保存了很多的无用的ScriptSession,所以不仅仅会影响//性能问题,更重要的是,可能就不能实现你想要的功能。//解决方法是在接收消息的页面,也就是你调用dwr.engine.setActiveReverseAjax(true);的页面调用一个dwr的方法。//dwr.engine.setNotifyServerOnPageUnload(true);//这个方法的功能就是在销毁或刷新页面时销毁当前ScriptSession,这样就保证了服务端获取的ScriptSession集合中没有//无效的ScriptSession对象。-->dwr.engine.setNotifyServerOnPageUnload(true);function start(){MathDelegate.handle();}function funA(num){document.getElementById("resultDiv").innerHTML="<h1>"+num+"</h1>";}</script></head><body><hr/>DWR演示:<br><span id="resultDiv"></span><hr/><input type="button" value="start" onclick="start();"></body></html>



原创粉丝点击