本文是關(guān)于使用 web 服務(wù)的 — 簡(jiǎn)單服務(wù)和 RESTful web 服務(wù) — 使用 Dojo Toolkit。為了更好地理解本文,您需要在您的系統(tǒng)進(jìn)行以下安裝和配置:
隨著人們對(duì)構(gòu)建更好的 Rich Internet Applications (RIAs) 的關(guān)注。JavaScript 架構(gòu)的出現(xiàn)使得 web 開(kāi)發(fā)人員可以將它們的應(yīng)用程序開(kāi)發(fā)得更具吸引力。 預(yù)先包裝的 JavaScript 庫(kù)擁有諸多優(yōu)點(diǎn)。第一,使用在不同瀏覽器和不同平臺(tái)上驗(yàn)證過(guò)的代碼可以極大地減少在許多不同瀏覽器上驗(yàn)證功能需要的測(cè)試次數(shù),因而也減少了代碼中缺陷。第二,使用已編寫且測(cè)試的代碼節(jié)省了大量時(shí)間,使您可以更快地完成您的應(yīng)用程序。 Ajax 是一個(gè)用來(lái)描述一個(gè)組合技術(shù)的術(shù)語(yǔ),在加載用戶 web 頁(yè)面時(shí)用來(lái)調(diào)用(異步)服務(wù)器。這項(xiàng)技術(shù)在今天的 web 頁(yè)中無(wú)處不在,在提供豐富的 Web 體驗(yàn)方面起著重要的作用。 在本文的示例中,每一次用戶只要修改文本框中的文本內(nèi)容,JavaScript 代碼都會(huì)進(jìn)行一個(gè)服務(wù)器調(diào)用來(lái)獲取參考值。一方面,這個(gè)附加函數(shù)將產(chǎn)生一些流量。另一方面,如果用戶通過(guò)提交整個(gè)表單進(jìn)行重復(fù)的搜索,該技術(shù)將節(jié)省很多流量。 本例使用最新版 Eclipse 以及已安裝的 JavaScript 工具。這些工具提供改進(jìn)功能來(lái)編輯 JavaScript 和 HTML 頁(yè)面。 根據(jù)下面步驟創(chuàng)建一個(gè)項(xiàng)目,然后利用這個(gè)項(xiàng)目創(chuàng)建幾個(gè) HTML 文件,來(lái)完成這個(gè)示例:
當(dāng)您向您的項(xiàng)目添加文件時(shí),Eclipse 自動(dòng)將文件發(fā)布到為服務(wù)器配置的目錄下。您可以通過(guò)在該項(xiàng)目中創(chuàng)建您的第一個(gè) HTML 文件(是一個(gè) index.html 文件)來(lái)了解這些,您需要修改該文件來(lái)包含實(shí)例所用的搜索框。 按照以下步驟創(chuàng)建新 HTML 文件:
新文件看起來(lái)像清單 1 這樣。 清單1. 新 index.html 文件
現(xiàn)在,您已經(jīng)有一個(gè)靜態(tài) web 項(xiàng)目和一個(gè) HTML 頁(yè)了,是時(shí)候向 HTML 頁(yè)中添加一個(gè)輸入控件了。HTML 文件包含一些 清單 2. 有控件的 index.html 文件
在這一點(diǎn)上,與空白版本有很大的區(qū)別。大部分工作可以通過(guò)使用 web 頁(yè)中的 JavaScript 代碼完成。 您可以以兩種方式包含 Dojo Toolkit:
哪個(gè)方法更好取決于您的需求。 使用公開(kāi)托管文件有兩個(gè)很好的理由:
使用一個(gè)公開(kāi)托管的文件主要優(yōu)勢(shì)是,如果 CDN 不可用(這種情況未必會(huì)發(fā)生,但是也有可能)您將不需要任何控件。如果由于某種原因 CDN 關(guān)閉了,您的網(wǎng)站也就不起作用了。如果您的內(nèi)部 web 應(yīng)用程序需要確保運(yùn)行正常,考慮維護(hù) Dojo 腳本文件來(lái)減少您應(yīng)用程序的單點(diǎn)故障。 要從一個(gè) CDN 中鏈接 Dojo 文件系統(tǒng),修改您的 index.html 文件使其看起來(lái)如清單 3 所示。 清單 3. 包含到 Dojo CDN 位置的鏈接
如果您想下載和包含 Dojo Toolkit 基本文件,而不是鏈接它,您可以從 參考資料 中鏈接的網(wǎng)站下載 Dojo JavaScript 代碼。下載完這個(gè)文件之后,您可以使用 File > Import 將其導(dǎo)入到 Eclipse 中的項(xiàng)目中。按照慣例,通常創(chuàng)建一個(gè)名為 js 或 script 的文件夾比較好,您不僅可以將您的 JavaScript 代碼放在其中,也可以將您下載的文件放在其中。 為了將您下載的文件包含到您的 Web 頁(yè),像這樣修改 index.html,如清單 4 所示。 清單 4. 包含一個(gè)本地引用到已下載的 dojo.js
現(xiàn)在您有了一個(gè)基本 web 頁(yè),您要準(zhǔn)備添加更多的功能,通過(guò)添加調(diào)用服務(wù)的 JavaScript 代碼來(lái)完成。 現(xiàn)在您已經(jīng)創(chuàng)建了 index.html 文件,并將 Dojo JavaScript 文件鏈接到您的 index.html 文件了,是時(shí)候調(diào)用一個(gè)簡(jiǎn)單服務(wù),來(lái)為用戶提供建議選項(xiàng)了。 本文提供兩個(gè)不同的調(diào)用服務(wù)和得到結(jié)果的示例。第一個(gè)是一個(gè)簡(jiǎn)單的服務(wù),不一定要符合常見(jiàn) RESTful web 服務(wù) URL 習(xí)慣。REST 不是一個(gè)標(biāo)準(zhǔn),但是有很多方法可以巧妙地獲取 URL,為客戶端和 RESTful web 服務(wù)提供一個(gè)較好的互操作性。第二個(gè)實(shí)例是一個(gè)使用 dojox.rpc.Rest 方法的介紹。 因?yàn)閬?lái)自服務(wù)的響應(yīng)根據(jù)查詢字符串進(jìn)行改變,服務(wù)不需要您以一個(gè)動(dòng)態(tài) web 應(yīng)用程序技術(shù)寫入其中(參考 參考資料,了解更多關(guān)于動(dòng)態(tài) web 應(yīng)用程序的信息)。清單 5 中顯示的是一個(gè)簡(jiǎn)單的 PHP 腳本,有一個(gè)名稱數(shù)組。根據(jù)用戶所提供的,從名稱列表中過(guò)濾出來(lái),然后將它們添加到 Extensible Markup Language (XML) 響應(yīng)。 清單 5. 使用 PHP 編寫一個(gè)簡(jiǎn)單的服務(wù)
您可以以其他任何語(yǔ)言編寫一個(gè)簡(jiǎn)單的腳本,返回一個(gè)類似的響應(yīng)來(lái)測(cè)試 JavaScript 代碼。 從 Dojo Toolkit 調(diào)用 URL 并不是很容易。如清單 6 所示簡(jiǎn)單地設(shè)置參數(shù)進(jìn)行調(diào)用,然后將它們傳遞到服務(wù)。 清單 6. 為 dojo.xhrGet 設(shè)置參數(shù)
這些參數(shù)將在表 1 中進(jìn)一步說(shuō)明。 表 1. dojo.xhrGet 參數(shù)
如果已經(jīng)正確設(shè)置了參數(shù),將它們傳遞到 dojo.xhrGet 方法。全部代碼如清單 7 所示。 清單 7. 全部 JavaScript 代碼
除了調(diào)用標(biāo)準(zhǔn) Ajax 風(fēng)格服務(wù)之外,您也要使用 Dojo Toolkit 調(diào)用 RESTful web 服務(wù)。 除了用于發(fā)送請(qǐng)求的 HTTP 方法之外,大部分 RESTful web 服務(wù)的 URL 構(gòu)建方式都遵守為特定類型請(qǐng)求構(gòu)建 URL 的方式。如果您構(gòu)建一個(gè)符合這些傳統(tǒng)習(xí)慣的 RESTful 服務(wù),您可以使用 dojo.rpc.Rest 對(duì)象為您進(jìn)行調(diào)用。dojo.rpc.Rest 對(duì)象進(jìn)一步簡(jiǎn)化了傳統(tǒng)服務(wù)調(diào)用。 清單 8 是一個(gè)使用 Dojo Toolkit 調(diào)用 RESTful web 服務(wù)的示例。 清單 8. 使用 dojo.rpc.Rest 調(diào)用一個(gè) RESTful web 服務(wù)
表 2 列出了固有的 RESTful URL 和 HTTP 動(dòng)作的示例,應(yīng)該同每個(gè)類型的服務(wù)相匹配。注意,不是每一個(gè)瀏覽器都支持所有 HTTP 方法,因此您應(yīng)該根據(jù)您的需要進(jìn)行測(cè)試和驗(yàn)證,對(duì)于多數(shù)用戶,使用 GET 和 POST 方法可能是最佳選擇。 表 2. RESTful 傳統(tǒng) URL
如果您想創(chuàng)建一個(gè) RESTful web 服務(wù)的全部實(shí)現(xiàn),框架有助于指導(dǎo)您構(gòu)建符合 RESTful URL 習(xí)慣的 URL。參見(jiàn) 參考資料,尋找不同語(yǔ)言的各種框架的更多信息。
既然您將要使用 Dojo 代碼調(diào)用服務(wù),您也可以更新
想要更新包含建議選項(xiàng)的 清單 9. 更新元素的內(nèi)容
現(xiàn)在,您的代碼已經(jīng)可以正常運(yùn)行了,您可以在瀏覽器中查看您的 index.html 頁(yè)。當(dāng)您輸入一個(gè)值時(shí) — 例如 當(dāng)從一個(gè) web 瀏覽器處理長(zhǎng)期運(yùn)行服務(wù)時(shí),主要關(guān)注兩方面的問(wèn)題:
在服務(wù)執(zhí)行時(shí),如果在瀏覽器中沒(méi)有明顯的改變,用戶體驗(yàn)將受長(zhǎng)期運(yùn)行服務(wù)的影響。如果您的 web 頁(yè)含有一個(gè)按鈕,可以進(jìn)行一個(gè) Ajax 或 RESTful 服務(wù)調(diào)用或者顯示結(jié)果,您應(yīng)該利用這些瀏覽器來(lái)顯示用戶即將發(fā)生的事情。否則您將要冒這樣的風(fēng)險(xiǎn),一個(gè)用戶多次提交表單或者您將對(duì)網(wǎng)站很不耐煩甚至離開(kāi)。 為了應(yīng)對(duì)用戶體驗(yàn)問(wèn)題,使用一個(gè)動(dòng)畫(huà)(Dojo Toolkit 有針對(duì)這些的方法)或者禁用提交按鈕,使用戶不能多次提交。有了動(dòng)畫(huà)視覺(jué)(例如,旋轉(zhuǎn)時(shí)鐘) ,用戶可以意識(shí)到將要發(fā)生什么,更愿意等待進(jìn)程完成。 期待長(zhǎng)期運(yùn)行的服務(wù)來(lái)使用 Ajax 調(diào)用可能有問(wèn)題,但是它們可能是有效的示例。長(zhǎng)期運(yùn)行服務(wù)的示例是那些聚集數(shù)據(jù)、生成文檔或者存檔文件示例。 在這種情況下,簡(jiǎn)單調(diào)用服務(wù)并等待 — 特別是如果服務(wù)要運(yùn)行好幾秒,不是一個(gè)最佳實(shí)踐。如果您的連接是混亂的,或者您的瀏覽器關(guān)閉了,那么在服務(wù)完成時(shí),您將不能依賴回調(diào)機(jī)制來(lái)觸發(fā)。 如果您可以控制服務(wù),可以考慮向您的調(diào)用者返回一個(gè)惟一的限定符,使用一種后來(lái)向不同服務(wù)詢問(wèn)請(qǐng)求狀態(tài)的方式。您的瀏覽器可以將這些數(shù)字放到本地的一個(gè) cookie 存儲(chǔ)設(shè)備中,也可以讓瀏覽器和服務(wù)一起來(lái)保存用戶數(shù)量。 調(diào)用服務(wù)的這種方法允許您在服務(wù)器端開(kāi)始長(zhǎng)期運(yùn)行的進(jìn)程。在瀏覽器端,您可以對(duì)請(qǐng)求狀態(tài)使用輪詢來(lái)訪問(wèn)服務(wù)層。(您可以對(duì)此使用 Dojo Toolkit's Timer 對(duì)象),該方法為用戶提供靈活性和穩(wěn)定性。 除此之外,Dojo Toolkit 使您可以在您的 web 應(yīng)用程序中進(jìn)行 Ajax 調(diào)用,來(lái)提供 RIA 函數(shù)。不管是使用一個(gè) CDN 或者是您自己下載 Dojo Toolkit 文件,您都可以利用預(yù)先寫入的且已測(cè)試的函數(shù)的優(yōu)勢(shì)。 Dojo Toolkit 使用 Ajax 和 RESTful web 服務(wù)提供調(diào)用純 web 服務(wù)的方法。這個(gè)工具包允許您處理 JSON、XML 和來(lái)自 Ajax 服務(wù)的文本響應(yīng)。 學(xué)習(xí)
獲得產(chǎn)品和技術(shù)
討論
|
|
來(lái)自: LibraryPKU > 《J2EE》