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

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

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

    滿店香的家

    學習+實踐=進步

    第六部分 DWR原理

       通過前面五章學習,對DWR整體有所了解,但是我仍然對核心細節(jié)不是很清楚。我最后的辦法就是單步調(diào)試,調(diào)試之后將所有東西串一串,DWR的原理就清楚了,搞清楚核心生產(chǎn)線,其他全是輔助的,沒必要再分析了。老外聰明啊,服。
       我們以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系統(tǒng)默認需要加載的,Demo.js是Demo.java所對應(yīng)的。按理論,只要在web.xml和dwr.xml配置好,那么我們就可以在客戶端操作Demo.js,類似于操作服務(wù)器端的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>
    
            

           在瀏覽器第一次加載本頁面時,瀏覽器第一步發(fā)現(xiàn)<script type='text/javascript' src='../dwr/engine.js'> </script>,根據(jù)web.xml關(guān)于dwr的配置,系統(tǒng)會激發(fā)Servlet的POST方法,向客戶端輸出engine.js文件流,這個文件你可以在IE的緩存里面發(fā)現(xiàn),當然,程序會在最后輸出一刻比較客戶端是否已經(jīng)存在該文件,如果要輸出的文件流大小和和該文件大小一致,就不輸出了,同樣util.js、Demo.js也是這么輸出的。那么看看Demo.js文件里面的內(nèi)容如下:
    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方法已經(jīng)被解釋到Demo.js中了,只不過后面的調(diào)用還不是很清楚而已。
    繼續(xù)!
    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);
    };
      在調(diào)用engine.execute()方法時,最終采用無刷新訪問服務(wù)器技術(shù)。
     采用該技術(shù)的關(guān)鍵問題是兩個參數(shù),一個是url,往什么地方發(fā)送;一個是doc,發(fā)送什么內(nèi)容
     通過跟蹤engine.js我們知道
    url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr
    發(fā)送內(nèi)容如下:

    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,轉(zhuǎn)向的是DwrServlet,DwrServlet實際上獲取了兩部分信息,一部分是url,根據(jù)這個能夠解析到我們的目標java類、方法,另外一部分是發(fā)送信息包,實際上這就是SayHello所需要的參數(shù)輸入信息,最后,返回數(shù)據(jù),這些數(shù)據(jù)格式通過response返回,在engine.js中對應(yīng)于return batch.reply;通過解析返回對象,采用javascirpt將數(shù)據(jù)動態(tài)刷新到頁面。

        至此,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

    謝謝樓主的文章。請問樓主如何聯(lián)系啊,有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大全| 亚洲AV永久无码精品| 84pao强力永久免费高清| 日韩毛片在线免费观看| 亚洲AV无码专区在线观看成人| 亚洲av成人无码久久精品| 国产亚洲精久久久久久无码77777| 日韩免费视频网站| 色妞WWW精品免费视频| 最近免费中文字幕大全| 成人免费无码大片a毛片软件 | 国产成人免费一区二区三区| 一二三四免费观看在线视频中文版| 三级网站免费观看| 久久A级毛片免费观看| 日韩免费高清大片在线| 99视频免费播放| 国产大片线上免费观看| 一本无码人妻在中文字幕免费 | 亚洲乱码一二三四五六区| 亚洲乱码国产乱码精华| 污视频网站在线观看免费| sss在线观看免费高清| 免费国产成人午夜在线观看| 桃子视频在线观看高清免费视频| 亚洲免费在线观看视频| 国产嫩草影院精品免费网址| 久久久久亚洲精品中文字幕| 亚洲综合色一区二区三区小说| 亚洲综合久久一本伊伊区| 免费一级毛suv好看的国产网站 | 黄色一级毛片免费看| 亚洲色偷偷偷网站色偷一区| 亚洲免费在线播放| a级片免费在线观看| 国产亚洲一区区二区在线| 一个人看的免费视频www在线高清动漫 | 4444www免费看| 亚洲人成无码网WWW| 黄页免费视频播放在线播放| 中文字幕无码不卡免费视频|