<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)航:
     
    主站蜘蛛池模板: 亚洲av永久无码天堂网| 亚洲中文无码线在线观看| 亚洲国产成人AV在线播放| 黄瓜视频高清在线看免费下载| 亚洲成人网在线播放| 亚洲一区二区三区免费观看 | 在线观看成人免费视频不卡| 久久亚洲春色中文字幕久久久| 中文字幕av无码不卡免费| 久久亚洲免费视频| 99久久99久久精品免费观看 | 亚洲一卡2卡3卡4卡5卡6卡| 在线a人片天堂免费观看高清| 欧美亚洲精品一区二区| 在线亚洲精品自拍| 99久热只有精品视频免费看| 亚洲一区精品视频在线| 午夜寂寞在线一级观看免费| 丁香六月婷婷精品免费观看| 亚洲AV成人片色在线观看 | 午夜毛片不卡免费观看视频| 爱情岛论坛亚洲品质自拍视频网站| 亚洲va中文字幕无码| 成人电影在线免费观看| 亚洲在成人网在线看| 日本不卡视频免费| 久久久久久毛片免费看| 亚洲韩国在线一卡二卡| 国产网站免费观看| 国产午夜不卡AV免费| 亚洲人成7777| 亚洲精品第一国产综合精品99 | 黄色网站软件app在线观看免费| 亚洲男人天堂av| 免费毛片在线视频| 久久久精品免费国产四虎| 中文字幕 亚洲 有码 在线| 亚洲国产精品专区在线观看| 精品一区二区三区免费毛片爱 | 免费高清国产视频| 亚洲影院天堂中文av色|