亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

DWR讓AJAX如此簡單

2019-11-17 04:23:55
字體:
來源:轉載
供稿:網友
作者:Cloves Carneiro
譯者:simmone

版權聲明:任何獲得Matrix授權的網站,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
作者:Cloves Carneiro;simmone
原文地址:http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
中文地址:http://www.matrix.org.cn/resource/article/43/43926_DWR_Ajax.html
關鍵詞: DWR javascr
概述

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

javascript:void(0);">AJAX,或者說是異步JavaScript和XML,描述了一種使用混合了HTML(或XHTML)和層疊樣式表作為表達信息,來創建交互式的Web應用的開發技術;文檔對象模型(DOM),JavaScript,動態地顯示和與表達信息進行交互;并且,xmlhttpRequest對象與Web服務器異步地交換和處理數據。

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

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

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

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

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

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

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

DWR配置和使用
設置DWR的使用是簡單的:將DWR的jar文件拷入Web應用的WEB-INF/lib目錄中,在web.xml中增加一個servlet聲明,并創建DWR的配置文件。DWR的分發中需要使用一個單獨的jar文件。你必須將DWR servlet加到應用的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>


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

調試頁

現在你必須讓DWR知道通過XMLHttpRequest對象,什么對象將會接收請求。這個任務由叫做dwr.xml的配置文件來完成。在配置文件中,定義了DWR允許你從網頁中調用的對象。從設計上講,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>
上面的文件實現了我們例子中的兩個目標。首先,<convert>標記告訴DWR將dwr.sample.Apartment對象的類型轉換為聯合數組,因為,出于安全的原因,DWR默認的不會轉換普通bean。第二,<create>標記讓DWR暴露出dwr.sample.ApartmentDAO類給JavaScript調用;我們在頁面中使用JavaScript文件被javascript屬性定義。我們必須注意<include>標記,它指明了dwr.sample.ApartmentDAO類的哪些方法可用。

HTML/jsp代碼
配置完成后,你就可以啟動你的Web應用了,這時DWR會為從你的HTML或Java服務器端頁面(JSP)上調用所需方法作好準備,并不需要你創建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>
我們注意到當用戶改變搜索標準時,這是javascript:void(0);">AJAX在示例程序中的首次應用;正如他所看到的,當標準改變時,可用的公寓數量被更新了。我創建了兩個JavaScript函數:當某一個選擇下拉框中的值變化時被調用。ApartmentDAO.countApartments()函數是最重要的部分。最有趣的是第一個參數, loadTotal()函數,它指明了當接收到服務端的返回時DWR將會調用的JavaScript方法。loadTotal于是被調用來在HTML頁面的<div>中顯示結果。下面是在這個交互場景中所使用到的JavaScript函數:
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;
}
很明顯,用戶想看到符合他的搜索條件的公寓列表。那么,當用戶對他的搜索標準感到滿意,并且總數也是有效的話,他會按下顯示結果的按紐,這將會調用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()方法清空了存放搜索返回結果的表域,從用戶界面上獲取所需參數,并且將這些參數傳給DWR創建的ApartmentDAO對象。然后數據庫查詢將被執行,fillTable()將會被調用,它解析了DWR返回的對象(apartment),然后將其顯示到頁面中(apartmentsbody)。

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

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

資源
·javaworld.com:javaworld.com
·Matrix-Java開發者社區: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/
·javascript:void(0);">AJAX的定義:http://en.wikipedia.org/wiki/javascript:void(0);">AJAX
· “javascript:void(0);">AJAX:通向Web應用的新途徑": Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
· “非常動態的Web界面” Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
·XMLHttpRequest & javascript:void(0);">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使用導引" Thomas Baekdal (Baekdal.com,  2005.2):http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品一区二区| 日韩高清a**址| 精品女同一区二区三区在线播放| 国产亚洲精品久久久久动| 日韩专区中文字幕| 国产做受69高潮| 久久久久久九九九| 91欧美日韩一区| 久久精品国产久精国产一老狼| 国产精品欧美日韩| 欧美成人自拍视频| 欧美肥臀大乳一区二区免费视频| 青青在线视频一区二区三区| 国产精品久久一区主播| 最近2019年中文视频免费在线观看| 精品亚洲永久免费精品| 韩剧1988在线观看免费完整版| 亚洲精品成人av| www日韩欧美| 色偷偷91综合久久噜噜| 精品久久香蕉国产线看观看亚洲| 欧美美女18p| 18一19gay欧美视频网站| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲国产天堂网精品网站| 国产精品成人v| 欧美精品激情视频| 国产精品日韩欧美大师| 久久久久久久久久久成人| 久久亚洲国产成人| 91久久久在线| 日本一区二区三区在线播放| 亚洲天堂久久av| 97久久精品人人澡人人爽缅北| 久久久精品免费| 亚洲欧洲第一视频| 国产免费一区二区三区在线能观看| 亚洲日韩中文字幕| 国产午夜精品视频免费不卡69堂| 久久九九免费视频| 欧美丰满片xxx777| 一区二区三区回区在观看免费视频| 久久影院中文字幕| 国产ts一区二区| 欧美激情一区二区三区久久久| 国产一区二区丝袜| 国产精品27p| 日韩美女激情视频| 国产国语刺激对白av不卡| 国产一区二区三区精品久久久| www日韩中文字幕在线看| 日本精品性网站在线观看| 蜜臀久久99精品久久久久久宅男| 久久免费视频这里只有精品| 午夜精品在线视频| 欧美视频专区一二在线观看| 在线精品国产成人综合| 狠狠躁天天躁日日躁欧美| 日韩av不卡在线| 亚洲桃花岛网站| 国产精品久久久久久久久久久久久| 日韩电影视频免费| 成人xxxx视频| 91av视频在线免费观看| 青青草原成人在线视频| 国产剧情日韩欧美| 日韩专区在线观看| 最近2019中文字幕在线高清| 亚洲视频网站在线观看| 日韩中文在线中文网在线观看| 成人淫片在线看| 日本不卡视频在线播放| 国产人妖伪娘一区91| 色综合久久精品亚洲国产| 日韩av网站导航| 亚洲最大中文字幕| 欧美日韩中文字幕| 91精品国产91久久久久久最新| 国产日本欧美在线观看| 久久夜色精品国产| 国产精品久久久久久久久久久新郎| 久久久国产精品亚洲一区| 国产午夜精品一区二区三区| 亚洲欧美日韩中文在线制服| 精品中文字幕久久久久久| 国产视频精品自拍| 成人精品在线视频| 狠狠色狠狠色综合日日小说| 91精品久久久久久综合乱菊| 亚洲美腿欧美激情另类| 最好看的2019年中文视频| 九九久久精品一区| 色七七影院综合| 欧美激情伊人电影| 最近中文字幕mv在线一区二区三区四区| 亚洲男女自偷自拍图片另类| 美女av一区二区| 亚洲精品欧美极品| 亚洲高清福利视频| 国产成人综合久久| 亚洲第一页中文字幕| 狠狠色狠狠色综合日日小说| 国产综合视频在线观看| 日本人成精品视频在线| 亚洲影院色在线观看免费| 日本韩国欧美精品大片卡二| 色综合久久精品亚洲国产| 亚洲国产精品字幕| 色先锋久久影院av| 欧美激情一区二区三区在线视频观看| 97国产精品免费视频| 国产69精品久久久久99| 色综合久久88色综合天天看泰| 亚洲最大的免费| 国产精品视频在线观看| 国产精品青青在线观看爽香蕉| 国产亚洲在线播放| 日韩电影免费观看中文字幕| 国产精品91久久久久久| 国产免费亚洲高清| 日韩美女视频在线观看| 欧美电影电视剧在线观看| 久久精品视频免费播放| 久久国产加勒比精品无码| 日韩va亚洲va欧洲va国产| 久久久亚洲影院你懂的| 成人黄色影片在线| 国产精品igao视频| 久久久久久久一区二区三区| 欧美大片欧美激情性色a∨久久| 欧美黑人xxx| 亚洲欧美中文日韩在线v日本| 高清欧美性猛交xxxx| 91精品国产自产在线| 日韩电影在线观看永久视频免费网站| 成人亚洲综合色就1024| 成人精品久久av网站| 成人a在线视频| 欧美日韩加勒比精品一区| 亚洲国产成人久久综合| 2020国产精品视频| 成人国产在线视频| 91人人爽人人爽人人精88v| 国产亚洲一区精品| 欧美丝袜一区二区三区| 日韩69视频在线观看| 自拍偷拍免费精品| 久久久久久久久中文字幕| 国产精品久久久久久久久粉嫩av| 亚洲第一色中文字幕| 亚洲一区二区三区四区视频| 91久久久久久久久久久| 亚洲a级在线观看| 亚洲精品97久久| 中文字幕在线国产精品| 亚洲欧洲一区二区三区久久| 97国产精品人人爽人人做| 国产精品白丝av嫩草影院| 清纯唯美亚洲激情| 亚洲春色另类小说| 国产一区二区日韩精品欧美精品| 91精品中国老女人| 亚洲人成在线观看网站高清| 欧美黑人极品猛少妇色xxxxx|