DWR是Direct Web Remoting 的縮寫。
DWR 是一個開放源碼的使用 Apache 許可協(xié)議的解決方案,它包含服務(wù)器端 Java 庫、一個 DWR servlet 以及 JavaScript 庫。雖然 DWR 不是 Java 平臺上唯一可用的 Ajax-RPC工具包,但是它是最成熟的,而且提供了許多有用的功能。
從最簡單的角度來說,DWR 是一個引擎,可以把服務(wù)器端 Java對象的方法公開給 JavaScript 代碼。使用 DWR 可以有效地從應(yīng)用程序代碼中把 Ajax 的全部請求-響應(yīng)循環(huán)消除掉。這意味著客戶端代碼再也不需要直接處理 XMLHttpRequest 對象或者服務(wù)器的響應(yīng)。不再需要編寫對象的序列化代碼或者使用第三方工具才能把對象變成 XML。甚至不再需要編寫 servlet 代碼把 Ajax 請求調(diào)整成對 Java 域?qū)ο蟮恼{(diào)用。 ]
DWR 是作為 Web 應(yīng)用程序中的 servlet 部署的。把它看作一個黑盒子,這個 servlet 有兩個主要作用:首先,對于公開的每個類,DWR 動態(tài)地生成包含在 Web 頁面中的 JavaScript。
生成的JavaScript包含存根函數(shù),代表Java類上的對應(yīng)方法并在幕后執(zhí)行 XMLHttpRequest。這些請求被發(fā)送給 DWR,這時它的第二個作用就是把請求翻譯成服務(wù)器端 Java 對象上的方法調(diào)用并把方法的返回值放在 servlet 響應(yīng)中發(fā)送回客戶端,編碼成 JavaScript。DWR 還提供了幫助執(zhí)行常見的用戶界面任務(wù)的 JavaScript 工具函數(shù)。
DWR(Direct Web Remoting)是一個用于改善web頁面與Java類交互的遠程服務(wù)器端Ajax開源框架,可以幫助開發(fā)人員開發(fā)包含AJAX技術(shù)的網(wǎng)站.它可以允許在瀏覽器里的代碼使用運行在WEB服務(wù)器上的JAVA函數(shù),就像它就在瀏覽器里一樣。
2.1、dwr.xml的配置
2 <allow>
3 <create creator="new" javascript="testClass" >
4 <include method="testMethod1"/>
5 </create>
6 </allow>
7 </dwr>
8
<allow>標(biāo)簽中包括可以暴露javascript訪問的東西。
<create>標(biāo)簽中指定javascript中可以訪問的java類,并定義DWR應(yīng)當(dāng)如何獲得要進行遠程的類的實例。creator="new"屬性指定java類實例的生成方式,new意味著DWR應(yīng)當(dāng)調(diào)用類的默認構(gòu)造函數(shù)來獲得實例,其他的還有spring方式,通過與IOC容器Spring進行集成來獲得實例等等。javascript=" testClass "屬性指定javascript代碼訪問對象時使用的名稱。標(biāo)簽指定要公開給javascript的java類名。
<include>標(biāo)簽指定要公開javascript的方法。不指定的話就公開所有方法。
<exclude>標(biāo)簽指定要防止被訪問的方法。
入門視頻:
拓展閱讀:
http://baike.baidu.com/view/73492.htm
三.實例
先下載DWR的JAR包,下載地址:
將demo(dwr-3.0.0.116.rc1-src\core\impl\demo\web\WEB-INF\lib)實例下的jar文件導(dǎo)入新建項目的web-inf/lib目錄下,另外還要加入dwr.jar.
(注意:要加入commons-logging-1.0.4.jar,缺少有時候會報錯.)
1.在web.xml文件中注冊DWRServlet:負責(zé)處理客戶端的請求,并呼叫Java物件的是DWRServlet
2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6 <servlet>
7 <servlet-name>dwr-invoker</servlet-name>
8 <servlet-class>
9 org.directwebremoting.servlet.DwrServlet
10 </servlet-class>
11 <init-param>
12 <param-name>debug</param-name>
13 <param-value>true</param-value>
14 </init-param>
15 </servlet>
16
17 <servlet-mapping>
18 <servlet-name>dwr-invoker</servlet-name>
19 <url-pattern>/dwr/*</url-pattern>
20 </servlet-mapping>
21 </web-app>
2.編寫Java物件,即業(yè)務(wù)Bean:
2
3 public class Service {
4
5 public String sayHello(String yourName) {
6 //可以是訪問數(shù)據(jù)庫的復(fù)雜代碼
7 return "Hello World " + yourName;
8 }
9 }
3.編寫dwr.xml:客戶端要呼叫這個Java物件,傳給它參數(shù),而返回一個字串,客戶端再展示這個字串,很神奇吧?其實就是是要告訴DWRServlet這件事情:
2 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
3 <dwr>
4 <allow>
5 <create creator="new" javascript="service">
6 <param name="class" value="helloWorld.Service" />
7 </create>
8 </allow>
9 </dwr>
4.測試DWR

1) 要引用幾個dwr的js,其中engine.js必須要,如果需要用到dwr提供的一些方便的工具要引用util.js
2) 然后還要引用dwr自動生成的js,dwr/interface/service.js,注意js名字要和dwr.xml配置的一樣
3) js里的service.sayHello和java類的那個有一點區(qū)別,多了個參數(shù),用來callback返回的數(shù)據(jù)
index.jsp
2 <html>
3 <head>
4 <title>testDWR</title>
5 <script type='text/javascript' src='dwr/util.js'> </script>
6 <script type='text/javascript' src='dwr/engine.js'> </script>
7 <script type="text/javascript" src="dwr/interface/service.js"></script>
8 <script type="text/javascript">
9 function firstDwr() {
10 service.sayHello("Jorwen", callBackHello);
11 }
12 function callBackHello(data) {
13 alert(data);
14 }
15 </script>
16 </head>
17 <body>
18 <input type="button" name="button" value="測試" onclick="firstDwr();">
19 </body>
20 </html>

posted @ 2011-10-10 16:07 簡簡單單 | 編輯 收藏