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

前端之家收集整理的这篇文章主要介绍了DWR3 高级主题之反向Ajax(DWR3的comat模式演示1)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
DWR 高级主题反向Ajax(DWR3的comat 模式演示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>  
            <!-- 下面是comet<strong>模式</strong>的<strong>反向</strong>Ajax所需要的参数 -->  
            <init-param>  
                <param-name>activeReverseAjaxEnabled</param-name>  
                <param-value>true</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++);  
                }  
            });  
        }  
          
          
        /** 
          * 触发推送的方式(触发10次),comet方式,有数据的情况下触发推送 
         */  
        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>  
            <!-- 注意:<strong>反向</strong>Ajax中,util.js是必须包含的 -->  
            <script type="text/javascript" src="dwr/util.js"></script>  
            <script type="text/javascript" src="dwr/interface/MathDelegate.js"></script>  
            <script>  
                <!--  轮询<strong>模式</strong>与comet<strong>模式</strong>的<strong>反向</strong>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<strong>演示</strong>:<br><span id="resultDiv"></span>  
            <hr/>  
            <input type="button" value="start" onclick="start();">  
        </body>  
    </html>  
原文链接:https://www.f2er.com/ajax/164761.html

猜你在找的Ajax相关文章