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

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

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

    kooyee ‘s blog

    開源軟件, 眾人努力的結(jié)晶, 全人類的共同財(cái)富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Ajax框架DWR入門

    Posted on 2008-02-13 19:02 kooyee 閱讀(1069) 評(píng)論(0)  編輯  收藏 所屬分類: Ajax學(xué)習(xí)手記

    Direct Web Remoting

    DWR allows Javascript in a browser to interact with Java on a server and helps you manipulate web pages with the results.

    DWR is Easy Ajax for Java
    官方網(wǎng)站:http://getahead.ltd.uk/dwr/

    //DWR--不錯(cuò)的Ajax框架之一

    本文內(nèi)容:

    1. DWR介紹
    2. DWR原理
    3. DWR開發(fā)步驟
    4. dwr.xml說明
    5. DWR核心引擎
    6. DWR工具包

    DWR介紹

    • What is DWR?
    1. 在服務(wù)器上運(yùn)行的Servlet來處理請(qǐng)求并把結(jié)果返回瀏覽器。
    2. 運(yùn)行在瀏覽器上的Javascript,可以發(fā)送請(qǐng)求,并動(dòng)態(tài) 改變頁面。DWR會(huì)根據(jù)你的Java類動(dòng)態(tài)的生成Javascript代碼。這些代碼魔力是讓你感覺整個(gè)Ajax調(diào)用都是在瀏覽器上發(fā)生的,但事實(shí)上是服務(wù)器執(zhí)行了這些代碼,DWR負(fù)責(zé)數(shù)據(jù)的傳遞和轉(zhuǎn)換。
    3. 這種Java和Javascript之間的遠(yuǎn)程調(diào)用會(huì)讓DWR用戶感覺像是曾經(jīng)習(xí)慣使用的RMI或SOAP的RPC機(jī)制。而且這一過程還不需要額外的瀏覽器插件。
    4. Java是同步的,而Ajax是異步的。所以當(dāng)你調(diào)用一個(gè)遠(yuǎn)程方法時(shí),你要給DWR一個(gè)回調(diào)函數(shù),當(dāng)數(shù)據(jù)從網(wǎng)絡(luò)上回來時(shí),DWR會(huì)調(diào)用這個(gè)函數(shù)。
    • DWR的作用:
    1. 有效地從應(yīng)用程序代碼中把 Ajax 的全部請(qǐng)求-響應(yīng)循環(huán)消除掉。
    2. 客戶端代碼再也不需要直接處理XMLHttpRequest 對(duì)象或者服務(wù)器的響應(yīng)。
    3. 不再需要編寫對(duì)象的序列化代碼或者使用第三方工具才能把對(duì)象變成 XML。
    4. 不再需要編寫 servlet 代碼把 Ajax 請(qǐng)求調(diào)整成對(duì) Java 域?qū)ο蟮恼{(diào)用

    DWR原理

    • DWR是作為Web應(yīng)用的一個(gè)Servlet進(jìn)行部 署的,是一個(gè)黑盒子中的servlet。
    1. 對(duì)于公共有的每個(gè)類,DWR 動(dòng)態(tài)地生成包含在 Web 頁面中的 JavaScript。生成的JavaScript 包含存根函數(shù),代表 Java 類上的 對(duì)應(yīng)方法并在幕后執(zhí)行XMLHttpRequest。這些請(qǐng)求被發(fā)送給DWR。
    2. 把請(qǐng)求翻譯成服務(wù)器端 Java 對(duì)象上的方法調(diào)用并把方法的返回值放在servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。

    DWR開發(fā)步驟

    • Download jar包
    1. http://getahead.org/dwr/download
    2. Copy dwr.jar into WEB-INF/lib
    • 修改web.xml,新增 DwrServlet

    代碼片斷:

    <servlet>
            
    <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>
        
    </servlet>
     
        
    <servlet-mapping>
            
    <servlet-name>dwr-invoker</servlet-name>
            
    <url-pattern>/dwr/*</url-pattern>
        
    </servlet-mapping>
    • 編寫服務(wù)器端Java類
    1. 不要出現(xiàn)Javascript保留關(guān)鍵字;和保留關(guān)鍵字同名的函數(shù)指定被排除。多數(shù)Javascript的關(guān)鍵字和Java是相同的。所以你不可能有一個(gè)方法叫做”try()”。但是該死”delete()”對(duì)與Javascript有著特殊意義,而對(duì)Java則不是。
    2. Javascript方法重載是不支持的,所以盡量不要再Java中使用。

    一個(gè)小例子:

    package cn.com.jacken.dwr;
     
    public class HelloWorld {
        
    public String sayHello(String name) {
            
    return "Hi, " + name;
        
    }
    }
    • 在dwr.xml文件注冊(cè)Java對(duì)象

    舉例:

    <dwr>
        
    <allow>
            
    <create creator="new" javascript="HelloWorld" scope="page">
                
    <param name="class" value="cn.com.jacken.dwr.HelloWorld" />
            
    </create>
        
    </allow>
    </dwr>
    • 在Web 頁面中添加DWR AJAX庫

    代碼片段:

    <script src='dwr/engine.js'>
    <
    /script>
    <script src='dwr
    /util.js'>
    </script>
    <script src=
    'dwr/interface/HelloWorld.js'>
    </script>

    dwr.xml說明

    請(qǐng)看另外一篇文章:DWR配置文件dwr.xml詳解

    DWR核心引擎engine.js

    1. 頁面中加入:
      <script type='text/javascript' src='dwr/engine.js' />
    2. 設(shè)置超時(shí)時(shí)間:

      全局設(shè)置:

       

      dwr.engine.setTimeout(1000);

      局部設(shè)置(優(yōu)先級(jí)高):

      Remote.singleMethod(params, { callback:function(data)
      { ... }, timeout:2000 });
    3. 錯(cuò)誤處理:
      全局設(shè)置:
      function handler(msg) {
      alert(msg);
      }
      dwr.engine.setErrorHandler(handler);

      局部設(shè)置:

      Remote.method(params, {
      callback:function(data) { ... },
      errorHandler:handler
      });
    4. 批量執(zhí)行 :
      dwr.engine.beginBatch();
      var selValue=…;
      //調(diào)用服務(wù)器Java程序
      Province.getCitiesByProvince(selValue,callBack);
      Province.getNick(callBack2);
      dwr.engine.endBatch({
      timeout:3000
      });
      //…

    DWR工具包

    1. 必須在頁面引入util.js
      <script src='dwr/util.js'>
        <
      /script>
    2. $(”username”) = document.getElementById(”username”);
    3. setValue(id, value):這個(gè)函數(shù)能操作大多數(shù)HTML元素
    4. getValue(id):getValue(id)是 setValue()對(duì)應(yīng)的”讀版本”。
    5. setValues():批量設(shè)置值
    6. getValues():批量獲取值
    7. getText(id):為select列表設(shè)計(jì)的。你可能需要取得顯示的文字,而不是當(dāng)前選項(xiàng)的值。
    8. selectRange:選擇一個(gè)輸入框中的一定范圍的文字。
    9. ……

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产精品成人精品无码区| 免费A级毛片无码视频| 免费看片免费播放| 亚洲欧美成人综合久久久| 一个人免费观看在线视频www | 又爽又高潮的BB视频免费看| 日韩成人精品日本亚洲| 国产又大又粗又硬又长免费| 亚洲成AV人片在WWW| 亚洲第一页综合图片自拍| eeuss影院www天堂免费| 黑人精品videos亚洲人| 99在线在线视频免费视频观看 | 亚洲一区AV无码少妇电影| 精品国产麻豆免费网站| 男人扒开添女人下部免费视频| 亚洲精品高清一二区久久| 久久这里只精品99re免费| 久久亚洲精品中文字幕三区| 亚洲精品免费在线| 久久乐国产综合亚洲精品| 国产成人精品免费直播| EEUSS影院WWW在线观看免费| 久久精品国产精品亚洲色婷婷 | 爱情岛论坛亚洲品质自拍视频网站| 免费日本黄色网址| 热久久这里是精品6免费观看| 亚洲一区中文字幕久久| 香蕉高清免费永久在线视频| 国产免费高清69式视频在线观看| 亚洲AV无码一区二区二三区入口| 黄页免费的网站勿入免费直接进入| 亚洲avav天堂av在线网毛片| 超清首页国产亚洲丝袜| 又粗又大又黑又长的免费视频| 老妇激情毛片免费| 亚洲大片在线观看| 成人免费看黄20分钟| 一级毛片免费在线观看网站| 久久久久亚洲AV无码专区体验| 国产免费av片在线播放|