dwr 入門

//DWR--不錯的Ajax框架之一
本文內容:

[b]DWR介紹
DWR原理
DWR開發步驟
dwr.xml說明
DWR核心引擎
DWR工具包 [/b]
[b]DWR介紹[/b]
1,What is DWR?:
在服務器上運行的Servlet來處理請求並把結果返回瀏覽器。
運行在瀏覽器上的Javascript,可以發送請求,並動態 改變頁面。DWR會根據你的Java類動態的生成Javascript代碼。這些代碼魔力是讓你感覺整個Ajax調用都是在瀏覽器上發生的,但事實上是服務器執行了這些代碼,DWR負責數據的傳遞和轉換。
這種Java和Javascript之間的遠程調用會讓DWR用戶感覺像是曾經習慣使用的RMI或SOAP的RPC機制。而且這一過程還不需要額外的瀏覽器插件。
Java是同步的,而Ajax是異步的。所以當你調用一個遠程方法時,你要給DWR一個回調函數,當數據從網絡上回來時,DWR會調用這個函數。
2,DWR的作用:
有效地從應用程序代碼中把 Ajax 的全部請求-響應循環消除掉。
客戶端代碼再也不需要直接處理XMLHttpRequest 對象或者服務器的響應。
不再需要編寫對象的序列化代碼或者使用第三方工具才能把對象變成 XML。
不再需要編寫 servlet 代碼把 Ajax 請求調整成對 Java 域對象的調用
3,DWR原理
DWR是作爲Web應用的一個Servlet進行部 署的,是一個黑盒子中的servlet。
對於公共有的每個類,DWR 動態地生成包含在 Web 頁面中的 JavaScript。生成的JavaScript 包含存根函數,代表 Java 類上的 對應方法並在幕後執行XMLHttpRequest。這些請求被髮送給DWR。
把請求翻譯成服務器端 Java 對象上的方法調用並把方法的返回值放在servlet 響應中發送回客戶端,編碼成 JavaScript。
4,DWR開發步驟
Download jar包
http://getahead.org/dwr/download
Copy dwr.jar into WEB-INF/lib
修改web.xml,新增 DwrServlet
代碼片斷:

<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.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>
編寫服務器端Java類
不要出現Javascript保留關鍵字;和保留關鍵字同名的函數指定被排除。多數Javascript的關鍵字和Java是相同的。所以你不可能有一個方法叫做”try()”。但是該死”delete()”對與Javascript有着特殊意義,而對Java則不是。
Javascript方法重載是不支持的,所以儘量不要再Java中使用。
一個小例子:

下載: HelloWorld.java
package cn.com.jacken.dwr;

public class HelloWorld {
public String sayHello(String name) {
return "Hi, " + name;
}
}
在dwr.xml文件註冊Java對象
舉例:

<dwr>
<allow>
<create creator="new" javascript="HelloWorld" scope="page">
<param name="class" value="cn.com.jacken.dwr.HelloWorld" />
</create>
</allow>
</dwr>
在Web 頁面中添加DWR AJAX庫
代碼片段:

<script src='dwr/engine.js'>
</script>
<script src='dwr/util.js'>
</script>
<script src='dwr/interface/HelloWorld.js'>
</script>
dwr.xml說明
請看另外一篇文章:DWR配置文件dwr.xml詳解

DWR核心引擎engine.js
頁面中加入:
<script type='text/javascript' src='dwr/engine.js' />
設置超時時間:

全局設置:


dwr.engine.setTimeout(1000);
局部設置(優先級高):

Remote.singleMethod(params, { callback:function(data)
{ ... }, timeout:2000 });
錯誤處理:
全局設置:
function handler(msg) {
alert(msg);
}
dwr.engine.setErrorHandler(handler);
局部設置:

Remote.method(params, {
callback:function(data) { ... },
errorHandler:handler
});
批量執行 :
dwr.engine.beginBatch();
var selValue=…;
//調用服務器Java程序
Province.getCitiesByProvince(selValue,callBack);
Province.getNick(callBack2);
dwr.engine.endBatch({
timeout:3000
});
//…
DWR工具包
必須在頁面引入util.js
<script src='dwr/util.js'>
</script>
$(”username”) = document.getElementById(”username”);
setValue(id, value):這個函數能操作大多數HTML元素
getValue(id):getValue(id)是 setValue()對應的”讀版本”。
setValues():批量設置值
getValues():批量獲取值
getText(id):爲select列表設計的。你可能需要取得顯示的文字,而不是當前選項的值。
selectRange:選擇一個輸入框中的一定範圍的文字。
……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章