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

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

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

    posts - 120,  comments - 19,  trackbacks - 0
    首先了解一下什么時DWR(Direct Web Remoting )

    ?? ?DWR 是一個開放源碼的使用 Apache 許可協(xié)議的解決方案,它包含服務(wù)器端 Java 庫、一個 DWR servlet 以及 JavaScript 庫。雖然 DWR 不是 Java 平臺上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了許多有用的功能。

    ??? 從最簡單的角度來說,DWR 是一個引擎,可以把服務(wù)器端 Java 對象的方法公開給 JavaScript 代碼。使用 DWR 可以有效地從應(yīng)用程序代碼中把 Ajax 的全部請求-響應(yīng)循環(huán)消除掉。這意味著客戶端代碼再也不需要直接處理 XMLHttpRequest 對象或者服務(wù)器的響應(yīng)。不再需要編寫對象的序列化代碼或者使用第三方工具才能把對象變成 XML。甚至不再需要編寫 servlet 代碼把 Ajax 請求調(diào)整成對 Java 域?qū)ο蟮恼{(diào)用。


    ??? DWR 是作為 Web 應(yīng)用程序中的 servlet 部署的。把它看作一個黑盒子,這個 servlet 有兩個主要作用:首先,對于公開的每個類,DWR 動態(tài)地生成包含在 Web 頁面中的 JavaScript。生成的 JavaScript 包含存根函數(shù),代表 Java 類上的對應(yīng)方法并在幕后執(zhí)行 XMLHttpRequest。 這些請求被發(fā)送給 DWR,這時它的第二個作用就是把請求翻譯成服務(wù)器端 Java 對象上的方法調(diào)用并把方法的返回值放在 servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。DWR 還提供了幫助執(zhí)行常見的用戶界面任務(wù)的 JavaScript 工具函數(shù)。
    ---------------------------------
    概述

    這篇文章闡述了使用開源項目DWR(直接Web遠程控制)和AJAX(異步JavaScript和XML)的概念來提高Web應(yīng)用的可用性。作者一步步來展示DWR如何使得AJAX的應(yīng)用既簡單又快捷。(1600字;2005年6月20日)

    AJAX, 或者說是異步JavaScript和XML,描述了一種使用混合了HTML(或XHTML)和層疊樣式表作為表達信息,來創(chuàng)建交互式的Web應(yīng)用的開發(fā)技 術(shù);文檔對象模型(DOM),JavaScript,動態(tài)地顯示和與表達信息進行交互;并且,XMLHttpRequest對象與Web服務(wù)器異步地交換 和處理數(shù)據(jù)。

    因特網(wǎng)上許多例子展示了在一個HTML文件內(nèi)部使用XMLHttpRequest與服務(wù)器端進行交互的必要的步驟。當手工地 編寫和維護XMLHttpRequest代碼時,開發(fā)者必須處理許多潛在的問題,特別是類似于跨瀏覽器的DOM實現(xiàn)的兼容性這樣的問題。這將會導(dǎo)致在編碼 和調(diào)試Javascript代碼上面花費數(shù)不清的時間,這顯然對開發(fā)者來說很不友好。

    DWR(直接Web遠程控制)項目是在Apache 許可下的一個開源的解決方案,它供給那些想要以一種簡單的方式使用AJAX和XMLHttpRequest的開發(fā)者。它具有一套Javascript功能 集,它們把從HTML頁面調(diào)用應(yīng)用服務(wù)器上的Java對象的方法簡化了。它操控不同類型的參數(shù),并同時保持了HTML代碼的可讀性。

    DWR 不是對一個設(shè)計的插入,也不強迫對象使用任何種類的繼承結(jié)構(gòu)。它和servlet框架內(nèi)的應(yīng)用配合的很好。對缺少DHTML編程經(jīng)驗的開發(fā)者來說,DWR 也提供了一個JavaScript庫包含了經(jīng)常使用的DHTML任務(wù),如組裝表,用item填充select下拉框,改變HTML元素的內(nèi)容,如< div>和<span>
    DWR網(wǎng)站是詳盡的并且有大量的文檔,這也是這篇文章的基礎(chǔ)。一些例子用來展示DWR如何使用和用它的庫可以完成什么樣的工作。

    這篇文章讓讀者看到了一個使用了DWR的Web應(yīng)用是如何一步步建立的。我會展示創(chuàng)建這個簡單的示例應(yīng)用的必要的細節(jié),這個應(yīng)用是可下載的并且可以在你的環(huán)境中布署來看看DWR如何工作。
    注意:找到有關(guān)AJAX的信息并不困難;網(wǎng)頁上有幾篇文章和博客的條目涵蓋了這個主題,每一個都試圖指出和評論這個概念的不同的方面。在資源部分,你會找到一些有趣的指向示例和文章的鏈接,來學(xué)習(xí)AJAX的更多的內(nèi)容。

    示例應(yīng)用
    這篇文章使用的示例應(yīng)用模擬了多倫多的一個公寓出租搜索引擎。用戶可以在搜索前選擇一組搜索標準。為了提高交互性,AJAX中以下兩種情況下使用:
    ·應(yīng)用通告用戶配合他的選擇會返回多少搜索結(jié)果。這個數(shù)字是實時更新的-使用AJAX-當用戶選擇的臥室和浴室的數(shù)量,或者價格范圍變化時。當符合標準的搜索結(jié)果沒有或太多時,用戶就沒有必要點擊搜索按紐。
    ·數(shù)據(jù)庫查詢并取回結(jié)果是由AJAX完成的。當用戶按下顯示結(jié)果按鈕時,數(shù)據(jù)庫執(zhí)行搜索。這樣,應(yīng)用看起來更具響應(yīng)了,而整個頁面不需要重載來顯示結(jié)果。

    數(shù)據(jù)庫
    我們使用的數(shù)據(jù)庫是HSQL,它是一種占用資源很小的Java SQL數(shù)據(jù)庫引擎,可以不需要安裝和配置的與Web應(yīng)用捆綁在一起。一個SQL文件被用來在Web應(yīng)用的上下文啟動時創(chuàng)建一個內(nèi)存中的表并添加一些記錄。

    Java類
    應(yīng) 用包含了兩個主要的類叫Apartment和ApartmentDAO。Apartment.java類是一個有著屬性和getter/setter方法 的簡單的Java類。ApartmentDAO.java是數(shù)據(jù)訪問類,用來查詢數(shù)據(jù)庫并基于用戶的搜索標準來返回信息。ApartmentDAO類的實 現(xiàn)的直接了當?shù)?它直接使用了Java數(shù)據(jù)庫聯(lián)接調(diào)用來得到公寓的總數(shù)和符合用戶請求的可用公寓的列表。

    DWR配置和使用
    設(shè) 置DWR的使用是簡單的:將DWR的jar文件拷入Web應(yīng)用的WEB-INF/lib目錄中,在web.xml中增加一個servlet聲明,并創(chuàng)建 DWR的配置文件。DWR的分發(fā)中需要使用一個單獨的jar文件。你必須將DWR servlet加到應(yīng)用的WEB-INF/web.xml中布署描述段中去。

    ????<servlet>
    ????????<servlet-name>dwr-invoker</servlet-name>
    ????????<display-name>DWR Servlet</display-name>
    ????????<description>Direct Web Remoter Servlet</description>
    ????????<servlet-class>uk.ltd.getahead.dwr.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>



    一 個可選的步驟是設(shè)置DWR為調(diào)試模式—象上面的例子那樣—在servlet描述段中將debug參數(shù)設(shè)為true。當DWR在調(diào)試模式時,你可以從 HTMl網(wǎng)頁中看到所有的可訪問的Java對象。包含了可用對象列表的網(wǎng)頁會出現(xiàn)在/WEBAPP/dwr這個url上,它顯示了對象的公共方法。所列方 法可以從頁面中調(diào)用,允許你,第一次,運行服務(wù)器上的對象的方法。下圖顯示了調(diào)試頁的樣子:

    image
    調(diào)試頁

    現(xiàn) 在你必須讓DWR知道通過XMLHttpRequest對象,什么對象將會接收請求。這個任務(wù)由叫做dwr.xml的配置文件來完成。在配置文件中,定義 了DWR允許你從網(wǎng)頁中調(diào)用的對象。從設(shè)計上講,DWR允許訪問所有公布類的公共方法,但在我們的例子中,我們只允許訪問幾個方法。下面是我們示例的配置 文件:

    <dwr>
    ????<allow>
    ????????<convert converter="bean" match="dwr.sample.Apartment"/>
    ????????<create creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
    ????????????<include method="findApartments"/>
    ????????????<include method="countApartments"/>
    ????????</create>
    ????</allow>
    </dwr>



    上 面的文件實現(xiàn)了我們例子中的兩個目標。首先,<convert>標記告訴DWR將dwr.sample.Apartment對象的類型轉(zhuǎn)換為 聯(lián)合數(shù)組,因為,出于安全的原因,DWR默認的不會轉(zhuǎn)換普通bean。第二,<create>標記讓DWR暴露出 dwr.sample.ApartmentDAO類給JavaScript調(diào)用;我們在頁面中使用JavaScript文件被javascript屬性定 義。我們必須注意<include>標記,它指明了dwr.sample.ApartmentDAO類的哪些方法可用。

    HTML/JSP代碼
    配 置完成后,你就可以啟動你的Web應(yīng)用了,這時DWR會為從你的HTML或Java服務(wù)器端頁面(JSP)上調(diào)用所需方法作好準備,并不需要你創(chuàng)建 JavaScript文件。在search.jsp文件中, 我們必須增加由DWR提供的JavaScript接口,還有DWR引擎,加入以下三行到我們的代碼中:

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



    我 們注意到當用戶改變搜索標準時,這是AJAX在示例程序中的首次應(yīng)用;正如他所看到的,當標準改變時,可用的公寓數(shù)量被更新了。我創(chuàng)建了兩個 JavaScript函數(shù):當某一個選擇下拉框中的值變化時被調(diào)用。ApartmentDAO.countApartments()函數(shù)是最重要的部分。 最有趣的是第一個參數(shù), loadTotal()函數(shù),它指明了當接收到服務(wù)端的返回時DWR將會調(diào)用的JavaScript方法。loadTotal于是被調(diào)用來在HTML頁面 的<div>中顯示結(jié)果。下面是在這個交互場景中所使用到的JavaScript函數(shù):

    function updateTotal() {
    ????$("resultTable").style.display = 'none';
    ????var bedrooms = document.getElementById("bedrooms").value;
    ????var bathrooms = document.getElementById("bathrooms").value;
    ????var price = document.getElementById("price").value;
    ????ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);
    }

    function loadTotal(data) {
    ????document.getElementById("totalRecords").innerHTML = data;
    }



    很明顯,用戶想看到符合他的搜索條件的公寓列表。那么,當用戶對他的搜索標準感到滿意,并且總數(shù)也是有效的話,他會按下顯示結(jié)果的按紐,這將會調(diào)用updateResults() JavaScript方法:

    function updateResults() {
    ????
    ????DWRUtil.removeAllRows("apartmentsbody");
    ????var bedrooms = document.getElementById("bedrooms").value;
    ????var bathrooms = document.getElementById("bathrooms").value;
    ????var price = document.getElementById("price").value;
    ????ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);
    ????$("resultTable").style.display = '';
    }

    function fillTable(apartment) {
    ????DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
    }


    updateResults ()方法清空了存放搜索返回結(jié)果的表域,從用戶界面上獲取所需參數(shù),并且將這些參數(shù)傳給DWR創(chuàng)建的ApartmentDAO對象。然后數(shù)據(jù)庫查詢將被執(zhí) 行,fillTable()將會被調(diào)用,它解析了DWR返回的對象(apartment),然后將其顯示到頁面中(apartmentsbody)。

    安全因素
    為 了保持示例的簡要,ApartmentDAO類盡可能的保持簡單,但這樣的一個類通常有一組設(shè)置方法來操作數(shù)據(jù),如insert(), update()和delete()。DWR暴露了所有公共方法給所有的HTML頁面調(diào)用。出于安全的原因,像這樣暴露你的數(shù)據(jù)訪問層是不明智的。開發(fā)者 可以創(chuàng)建一個門面來集中所有JavaScript函數(shù)與底層業(yè)務(wù)組件之間的通信,這樣就限制了過多暴露的功能。

    結(jié)論
    這 篇文章僅僅讓你在你的項目中使用由DWR支持的AJAX開了個頭。DWR讓你集中注意力在如何提高你的應(yīng)用的交互模型上面,消除了編寫和調(diào)試 JavaScript代碼的負擔。使用AJAX最有趣的挑戰(zhàn)是定義在哪里和如何提高可用性。DWR負責了操作Web頁面與你的Java對象之間的通信,這 樣就幫助你完全集中注意力在如何讓你的應(yīng)用的用戶界面更加友好,
    我想感謝Mircea Oancea和Marcos Pereira,他們閱讀了這篇文章并給予了非常有價值的返匱。

    資源
    ·javaworld.com:javaworld.com
    ·Matrix-Java開發(fā)者社區(qū):http://www.matrix.org.cn/
    ·onjava.com:onjava.com
    ·下載示例程序的全部源碼:http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
    ·DWR: http://www.getahead.ltd.uk/dwr/index.html
    ·HSQL:http://hsqldb.sourceforge.net/
    ·AJAX的定義:http://en.wikipedia.org/wiki/AJAX
    · “AJAX:通向Web應(yīng)用的新途徑": Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
    · “非常動態(tài)的Web界面” Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
    ·XMLHttpRequest & AJAX 工作范例: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
    · “可用的XMLHttpRequest實踐” Thomas Baekdal (Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
    ·"XMLHttpRequest 使用導(dǎo)引" Thomas Baekdal (Baekdal.com,??2005.2):http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/
    ·AJAX實質(zhì):http://www.ajaxmatters.com/


    posted on 2006-08-16 17:06 阿成 閱讀(286) 評論(0)  編輯  收藏 所屬分類: Web
    主站蜘蛛池模板: 亚洲中文字幕一区精品自拍| 亚洲午夜福利精品无码| 亚洲视频免费观看| 日本免费一区二区久久人人澡| 久久久久久久亚洲精品| 手机永久免费的AV在线电影网| 又大又黄又粗又爽的免费视频| 亚洲国产av玩弄放荡人妇 | 亚洲精品第一国产综合精品| 午夜免费啪视频在线观看 | 亚洲日韩涩涩成人午夜私人影院| 色偷偷尼玛图亚洲综合| 国产伦一区二区三区免费| 美女羞羞喷液视频免费| 亚洲国产成人精品91久久久| 国产精品1024在线永久免费 | 亚洲av无码乱码国产精品| 午夜免费啪视频在线观看| 亚洲国产视频一区| 在线免费观看视频你懂的| 福利免费在线观看| 国产亚洲av片在线观看16女人| 久久九九全国免费| 亚洲H在线播放在线观看H| 免费鲁丝片一级在线观看| 人妖系列免费网站观看| 久久夜色精品国产嚕嚕亚洲av| 亚洲黄色片免费看| 久久亚洲精品无码av| 亚洲熟女少妇一区二区| 亚洲视频在线免费播放| 亚洲成a∧人片在线观看无码| 久久久久亚洲AV无码专区网站| 久9热免费精品视频在线观看| 天天爽亚洲中文字幕| 亚洲高清最新av网站| 永久在线免费观看| 黄页网址大全免费观看12网站| 亚洲男人天堂2017| 国产一级淫片视频免费看| 华人在线精品免费观看|