最近 Ajax 比較火,全世界都在討論。于是我也摻和摻和,直接用 XMLHttpRequest ?現在的我還沒有那個水平。用 Echo2 或者 backbase ,又感覺那些純 Ajax 的 framework 太重量級了。我要的只是一些簡單的應用而已。于是尋覓的重點放在了一些對 xmlhttpRequest 進行輕量級包裝的代碼庫上了。于是我找到了 DWR ( Direct Web Remoting )。 DWR 的口號是 AJAX and XMLHttpRequest made easy ,并且它也基本上做到了這一點。它提供了一個友好的框架和一些很有用的 JavaScript 庫,可以讓我用起 Ajax 更容易些。詳細的信息可以到他們的網站 http://www.getahead.ltd.uk/dwr/ 。順便在介紹一個網站吧: http://www.ajaxmatters.com 這里也有很多關于 Ajax 的資源。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
下面來簡單介紹一下 DWR 。
其實在沒有 XMLHttpRequest 前 DWR 就有了,那時它用的是 IFrame ,效果很差,所以我看看了就沒有再 diao 它。現在的 DWR 主要用 XMLHttpRequest ,當然也可以選者用 IFrame ,但是不推薦。
DWR 是個 open source software ,授權方式是 ASL version 2.0 的。現在網站上 examples and tutorials 做的也不錯。我就根據這些東西自己也做了一個應用,在本文的后面我會詳細講到。
現在 DWR 的最新版本是 1.0RC1 。在我的試用環境相還算比較穩定,沒有出現什么問題。
DWR 本身以一個 dwr.jar 的 jar 包存在,它的入口時一個 Servlet ( uk.ltd.getahead.dwr.DWRServlet )所以要在 web.xml 里配置一下就可以了。具體配置看這里 http://www.getahead.ltd.uk/dwr/intro.html 。比較簡單。 dwr 為我們提供了一個 framework 幫我們很容易的實現 JavaScript 和 java 之間的通信。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>
我還沒有看過
dwr
的源碼,具體他是怎么實現的我也不太清楚。但大致上肯定是通過
xmlhttprequest
來調用它的
servlet
然后把數據用
xml
打包解包了。其實我覺得這部分到不是
dwr
給我帶來的最方便的地方。最方便的地方應該是他的那些
js
的庫。
所以下面我要介紹一下它的兩個重要 js 對象。
DWREngine ( engine.js 中), DWRUtil (util.js 中 ) 。
DWREngine 中的方法是基本上是關于 XMLHttpRequest 的。
下面中介紹一些
DWREngine.setErrorHandler(handler)
默認的錯誤處理時彈出一個對話框,你可以通過這個方法改變成你需要的表現形式。
DWREngine.setWarningHandler(handler)
改變默認的警告處理形式
DWREngine.beginBatch()
Some Remote Function…
DWREngine.endBatch()
當你有幾個遠程調用要一起進行時,就要用到這兩個方法。
如果不用這兩個方法,你就會發現你的遠程調用并不以你想象的順序進行。
DWREngine 中還有一些其它的方法,我沒有用過。你可以通過 dwr 的 js-doc 來看。如果通過文檔看不懂它是干什么用的,就看 js 源碼,源碼的注釋也是比較詳細的。
DWRUtil 中也有一些很有用的方法。這些方法一般是編寫 js 的輔助方法。
比如 setValue 和 getValue 。大多數 html 標簽有 value 屬性,這時你要獲取或者設置它的值時就用 $(“someid”).value 就可以了。但是有些 html 標記是沒有 value 屬性的,它的值時在標簽的中間,如 <span id=”span<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">1”</chmetcnv>>some value</span> 這時你要取或設它的值的時候就用 DWRUtil.setValue($(“span1”) , someValue) 。這樣你就可以在客戶端動態的表現一些數據了。
還有很多很好用的方法, dwr 的例子中有一些說明,源碼中的注釋也比較詳細。
Dwr
就介紹到這里吧。下一篇,我做了個
table
的例子。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
