<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    滿店香的家

    學習+實踐=進步

    第六部分 DWR原理

       通過前面五章學習,對DWR整體有所了解,但是我仍然對核心細節不是很清楚。我最后的辦法就是單步調試,調試之后將所有東西串一串,DWR的原理就清楚了,搞清楚核心生產線,其他全是輔助的,沒必要再分析了。老外聰明啊,服。
       我們以DWR的第一個樣例為例Dynamically Text
       1,在index.html里面我們嵌入
         <script type='text/javascript' src='../dwr/engine.js'> </script>
         <script type='text/javascript' src='../dwr/util.js'> </script>
         <script type='text/javascript' src='../dwr/interface/Demo.js'> </script>
             前面兩個都是DWR系統默認需要加載的,Demo.js是Demo.java所對應的。按理論,只要在web.xml和dwr.xml配置好,那么我們就可以在客戶端操作Demo.js,類似于操作服務器端的Demo.js。
        

    HTML source:

    <p>
    Name:
    <input type="text" id="demoName"/>
    <input value="Send" type="button" onclick="update()"/>
    <br/>
    Reply: <span id="demoReply"></span>
    </p>
    

    Javascript source:

    function update() {
    var name = dwr.util.getValue("demoName");
    Demo.sayHello(name, function(data) {
    dwr.util.setValue("demoReply", data);
    });
    }
    

    Java source:

    package org.getahead.dwrdemo.simpletext;
    public class Demo {
    public String sayHello(String name) {
    return "Hello, " + name;
    }
    }
    

    dwr.xml

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

           在瀏覽器第一次加載本頁面時,瀏覽器第一步發現<script type='text/javascript' src='../dwr/engine.js'> </script>,根據web.xml關于dwr的配置,系統會激發Servlet的POST方法,向客戶端輸出engine.js文件流,這個文件你可以在IE的緩存里面發現,當然,程序會在最后輸出一刻比較客戶端是否已經存在該文件,如果要輸出的文件流大小和和該文件大小一致,就不輸出了,同樣util.js、Demo.js也是這么輸出的。那么看看Demo.js文件里面的內容如下:
    if (typeof this['Person'] != 'function') {
      
    function Person() {
        
    this.address = null;
        
    this.phoneNumber = null;
        
    this.name = null;
        
    this.id = 0;
        
    this.salary = 0;
      }

    }


    // Provide a default path to dwr.engine
    if (typeof this['dwr'] == 'undefined') this.dwr = {};
    if (typeof dwr['engine'] == 'undefined') dwr.engine = {};

    if (typeof this['Demo'] == 'undefined') this.Demo = {};

    Demo._path 
    = '/dwr/dwr';

    Demo.sayHello 
    = function(p0, callback) {
      
    return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
    }
    ;

    Demo.getInclude 
    = function(callback) {
      
    return dwr.engine._execute(Demo._path, 'Demo', 'getInclude', callback);
    }
    ;

        這樣我們就知道了,實際上Demo.java類的sayHello方法已經被解釋到Demo.js中了,只不過后面的調用還不是很清楚而已。
    繼續!
    public String sayHello(String name) {
    return "Hello, " + name;
    }
     翻譯成
           Demo._path = '/dwr/dwr';
     Demo.sayHello = function(p0, callback) {
      return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
    };
      在調用engine.execute()方法時,最終采用無刷新訪問服務器技術。
     采用該技術的關鍵問題是兩個參數,一個是url,往什么地方發送;一個是doc,發送什么內容
     通過跟蹤engine.js我們知道
    url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr
    發送內容如下:

    callCount=1
    windowName
    =DWR-442B435899
    c0
    -scriptName=Demo
    c0
    -methodName=sayHello
    c0
    -id=0
    c0
    -param0=string:Joe
    batchId
    =1
    page
    =/dwr/simpletext/index.html
    httpSessionId
    =
    scriptSessionId
    =1CC3A.0A3


    實際上url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr,轉向的是DwrServlet,DwrServlet實際上獲取了兩部分信息,一部分是url,根據這個能夠解析到我們的目標java類、方法,另外一部分是發送信息包,實際上這就是SayHello所需要的參數輸入信息,最后,返回數據,這些數據格式通過response返回,在engine.js中對應于return batch.reply;通過解析返回對象,采用javascirpt將數據動態刷新到頁面。

        至此,dwr的核心原理,基本清晰

    posted on 2008-04-06 12:13 滿店香 閱讀(3461) 評論(4)  編輯  收藏 所屬分類: dwr源碼分析

    Feedback

    # re: 第六部分 DWR原理 2008-04-28 10:49 rgy

    bucuo   回復  更多評論   

    # re: 第六部分 DWR原理[未登錄] 2008-05-23 10:37 sam

    學習了  回復  更多評論   

    # re: 第六部分 DWR原理[未登錄] 2008-10-27 23:05 jones

    謝謝樓主的文章。請問樓主如何聯系啊,有qq么?能向你請教么?  回復  更多評論   

    # Servisy Web 20 2009-05-18 12:24 Servisy Web 20

    Please post your favorite sites.
    I am from Albania and also am speaking English, please tell me right I wrote the following sentence: "Contact seo workers professional search engine optimization marketing consultants to improve your web site performance and search engine rankings.Left, bullet seo optimization, right."

    THX :-), Lisbet.  回復  更多評論   

    主站蜘蛛池模板: 亚洲AV无码不卡在线播放| 日本免费人成黄页网观看视频| 国产一级a毛一级a看免费人娇| 青青免费在线视频| 精品亚洲视频在线| 爱情岛亚洲论坛在线观看| 国产成人综合亚洲| 人妻仑乱A级毛片免费看| 一区二区三区免费看| 久久久久免费视频| 精品成人免费自拍视频| 桃子视频在线观看高清免费视频| 免费A级毛片无码视频| 嘿嘿嘿视频免费网站在线观看| 91精品国产免费久久久久久青草| 一个人看www在线高清免费看 | 亚洲免费在线视频观看| 精品亚洲国产成人| 亚洲成AV人影片在线观看| 国产偷国产偷亚洲高清人| 国产精品极品美女自在线观看免费| a级成人毛片免费图片| 99re6在线视频精品免费下载| 亚洲性线免费观看视频成熟 | 久久性生大片免费观看性| 免费91最新地址永久入口 | 鲁大师在线影院免费观看| 日韩国产免费一区二区三区| 性一交一乱一视频免费看| 亚洲国模精品一区| 亚洲成人中文字幕| 亚洲天然素人无码专区| 特级毛片爽www免费版| 一级毛片免费不卡在线| 成人免费无码大片A毛片抽搐| 亚洲国产婷婷综合在线精品| 久久精品国产精品亚洲色婷婷| 99999久久久久久亚洲| 特黄特色的大片观看免费视频| 99精品视频免费在线观看| 免费高清在线影片一区|