2009年3月3日星期二

DWR - Easy Ajax for Java

DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible.


DWR介紹
What is DWR?:
在伺服器上運行的Servlet來處理請求並把結果返回流覽器。

運行在流覽器上的Javascript,可以發送請求,並動態 改變頁面。DWR會根據你的Java類動態的生成Javascript代碼。這些代碼魔力是讓你感覺整個Ajax調用都是在流覽器上發生的,但事實上是伺服器執行了這些代碼,DWR負責資料的傳遞和轉換。

這種Java和Javascript之間的遠端調用會讓DWR用
戶感覺像是曾經習慣使用的RMI或SOAP的RPC機制。而且這一過程還不需要額外的流覽器插件。
Java是同步的,而Ajax是非同步的。所以當你調用一個遠端方法時,你要給DWR一個回調函數,當資料從網路上回來時,DWR會調用這個函數。

DWR的作用
:
有效地從應用程式碼中把 Ajax 的全部請求-回應迴圈消除掉。
用戶端代碼再也不需要直接處理XMLHttpRequest 物件或者伺服器的回應。
不再需要編寫物件的序列化代碼或者使用第三方工具才能把物件變成 XML。
不再需要編寫 servlet 代碼把 Ajax 請求調整成對 Java 域物件的調用


DWR原理

DWR是作為Web應用的一個Servlet進行部 署的,是一個黑盒子中的servlet。

對於公共有的每個類,DWR 動態地生成包含在 Web 頁面中的 JavaScript。生成的JavaScript 包含存根函數,代表 Java 類上的 對應方法並在幕後執行XMLHttpRequest。這些請求被發送給DWR。

把請求翻譯成伺服器端 Java 物件上的方法調用並把方法的返回值放在servlet 回應中發送回用戶端,編碼成 JavaScript。


編寫伺服器端Java類

不要出現Javascript保留關鍵字;和保留關鍵字同名的函數指定被排除。
多數Javascript的關鍵字和Java是相同的。所以你不可能有一個方法叫做”try()”。但是該死”delete()”對與Javascript有著特殊意義,而對Java則不是。

Javascript方法重載是不支援的,所以儘量不要再Java中使用。


1.
2. package test;
3.
4. public class HelloWorld {
5. public String sayHello(String name) {
6. return "Hi, " + name;
7. }
8. }



在dwr.xml檔註冊Java物件


在jsp頁面中添加DWR AJAX庫以及相應的js

注: 可以在啟動項目後,IE位址欄輸入 http://hostName:port/dwr/
查看動態javascript 路徑.以及所有可以運行的方法.




1、$(”username”) = document.getElementById(”username”);
2、setValue(id, value):這個函數能操作大多數HTML元素
3、getValue(id):getValue(id)是 setValue()對應的”讀版本”。
4、setValues():批量設置值
5、getValues():批量獲取值
6、getText(id):為select列表設計的。你可能需要取得顯示的文字,而不是當前選項的值。
7、selectRange:選擇一個輸入框中的一定範圍的文字。

沒有留言: