您的位置:首页 > 其它

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

2014-04-23 13:55 483 查看
DWR高级主题之反向Ajax(DWR3的轮询模式演示1)
----------

web.xml

[html] view
plaincopy

<?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

[html] view
plaincopy

<?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文件

[java] view
plaincopy

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] view
plaincopy

<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>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dwr 轮询模式