dwr學習(一):簡單dwr實例


 

博客分類: 
 

最近寫ajax寫煩了,想着能不能有個更簡單的“ajax”,一問就問到這個dwr了。趕緊去官網學習了下,這里寫個博客記錄一下實例。

 

測試環境:tomcat6.0

 

1、新建一個web項目(這里比較簡單,我就不贅述了),我這里的是TestWeb。

 

2、安裝dwr。

主要用到兩個jar包。

一個是dwr.jar:這個是dwr的主要文件,可以去官網下載。

下載鏈接:http://directwebremoting.org/dwr/downloads/index.html

另一個是commons-logging.jar,這個jar包比較常用,那個版本的都沒問題。我這里用的是commons-logging-1.0.4.jar。

將commons-logging-1.0.4.jar和dwr.jar拷貝到TestWeb項目的/WEB-INF/lib目錄下。

至此安裝完畢。

 

3、將dwr用到的servlet配置到web.xml中。

Xml代碼   收藏代碼
  1. <servlet>  
  2.   <display-name>DWR Servlet</display-name>  
  3.   <servlet-name>dwr-invoker</servlet-name>  
  4.   <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>  
  5.   <init-param>  
  6.     <param-name>debug</param-name>  
  7.     <param-value>true</param-value>  
  8.   </init-param>  
  9. </servlet>  
  10. <servlet-mapping>  
  11.   <servlet-name>dwr-invoker</servlet-name>  
  12.   <url-pattern>/dwr/*</url-pattern>  
  13. </servlet-mapping>  

也可以從http://directwebremoting.org/dwr/introduction/getting-started.html中拷貝。

 

4、添加dwr.xml。

在/WEB-INF新建dwr.xml,名稱必須為dwr.xml不能隨便取。內容為:

Xml代碼   收藏代碼
  1. <!DOCTYPE dwr PUBLIC  
  2.     "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"  
  3.     "http://getahead.org/dwr/dwr30.dtd">  
  4. <dwr>  
  5.   <allow>  
  6.     <!-- 調用系統類 -->  
  7.     <create creator="new" javascript="JDate">  
  8.       <param name="class" value="java.util.Date"/>  
  9.     </create>  
  10.     <!-- 調用自定義的類:帶一個參數 -->  
  11.     <create creator="new" javascript="Base64">  
  12.         <param name="class" value="com.wjl.test.Base64"></param>  
  13.     </create>  
  14.   </allow>  
  15. </dwr>  

 具體什么意思可以先不了解,也可以去官網上看或者下載附件進行了解。 官網鏈接: http://directwebremoting.org/dwr/introduction/getting-started.html。

我這里除了定義了一個系統自帶的java.util.Date,還有一個自定義的com.wjl.test.Base64,其代碼如下:

Java代碼   收藏代碼
  1. public class Base64 {  
  2.     // 加密  
  3.     public static String encode(String str) {  
  4.         byte[] b = null;  
  5.         String s = null;  
  6.         try {  
  7.             b = str.getBytes("utf-8");  
  8.         } catch (UnsupportedEncodingException e) {  
  9.             e.printStackTrace();  
  10.         }  
  11.         if (b != null) {  
  12.             s = new BASE64Encoder().encode(b);  
  13.             //據RFC 822規定,每76個字符,還需要加上一個回車換行去掉換行符  
  14.             s = s.replaceAll("[\\s*\t\n\r]", "");    
  15.         }  
  16.         return s;  
  17.     }  
  18.   
  19.     // 解密  
  20.     public static String decode(String s) {  
  21.         byte[] b = null;  
  22.         String result = null;  
  23.         if (s != null) {  
  24.             BASE64Decoder decoder = new BASE64Decoder();  
  25.             try {  
  26.                 b = decoder.decodeBuffer(s);  
  27.                 result = new String(b, "utf-8");  
  28.             } catch (Exception e) {  
  29.                 e.printStackTrace();  
  30.             }  
  31.         }  
  32.         return result;  
  33.     }  
  34. }  

5、新建jsp頁面進行調用。

a、在webRoot根目錄下新建testDwrDemo.jsp,html代碼為:

Html代碼   收藏代碼
  1. <input type="button" value="獲取當前月份" onclick="getMonth();" /><br />  
  2. 當前月份:<span id="curMonth"></span>  
  3. <br />  
  4. <br />  
  5. 加密數據:<input type="text" id="encodeStr" size="45"/><br />  
  6. 加密后:<input type="text" id="encodeResult" size="45"/><br />  
  7. <input type="button" value="加密" onclick="encode();" />  

以上代碼定義了兩個兩個方法,分別用來測試第4步中的兩個類。

 

b、在jsp頁面引入JS文件

<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/JDate.js"></script>
<script type="text/javascript" src="dwr/interface/Base64.js"></script>

這里有幾個注意點:
第一點:所有的js文件必須以dwr開頭,即便項目中並不存在dwr文件夾,也不存在以上的四個js。

第二點:engine.js必須要引用。utils.js可以不引用,只有當需要用到其中的方法時才引用。

第三點:后面兩個js文件是自己添加的,這種自己添加的js必須帶interface目錄,也就是自定義js必須以dwr/interface目錄開頭。(系統的以dwr就OK了)

第四點:自定義JS文件的命名:dwr.xml中javascript屬性定義的名稱+.+js。我的dwr.xml中javascript屬性一個為JDate一個Base64,所以兩個js的名稱為JDate.js和Base64.js。

 

c、使用js調用java類中的方法。

Js代碼   收藏代碼
  1. function getMonth(){  
  2.     /* 
  3.     //JDate:與自定義的js文件名稱相同,也與dwr.xml文件中定義的javascript屬性值相同 
  4.     JDate.getMonth(function(data){ 
  5.         alert("當前月份:"+(data+1)); 
  6.         document.getElementById("curMonth").innerHTML=(data+1); 
  7.     }); 
  8.     */  
  9.     //也可以寫成:  
  10.     JDate.getMonth(callback);  
  11.       
  12. }  
  13. function callback(data){  
  14.     alert("當前月份:"+(data+1));  
  15.     document.getElementById("curMonth").innerHTML=data;  
  16. }  
  17.   
  18. //該方法用來加密  
  19. function encode(){  
  20.     var str = document.getElementById("encodeStr").value;  
  21.     var str2 = Base64.encode(str,function callback(returnData) {  
  22.            alert(returnData);  
  23.            document.getElementById("encodeResult").value=returnData;  
  24.        });  
  25. }  

6、使用tomcat進行調試。

a、java類中的方法調試:

發布項目啟動tomcat,在瀏覽器中輸入:http://127.0.0.1:8080/TestWeb/dwr,然后回車。

瀏覽器中顯示所有配置在dwr.xml中的類。點擊某個類名,可以查看這個類中的方法。如我這里點擊Base64,結果如圖:

Base64.java中定義了這兩個類,且都是公開的,所以在這里顯示 了(至於怎么讓它不顯示,可以看最下邊的PS)。

我在encode的括號中輸入abc,點擊右側的"Execute"按鈕,會自動給我顯示加密后的結果,如圖:
 這個調試是不是很有用?

當然想關閉這種調試也很簡單,將web.xml中關於dwr的配置中的debug參數值改成false即可,這樣子訪問http://127.0.0.1:8080/TestWeb/dwr/將會出現404錯誤,自然也就不能調試了。是不是很方便。

 

b、JS方法調試。

這個很簡單,點擊頁面按鈕看看結果對不對就知道啦。

 

PS:關於讓指定的方法不顯示,可以通過<create>標簽下的<include>和<exclude>。

<include method=""/>:指定要公開給javascript的方法。
如:<include method="encode"/>,那么在JS中就可以調用該方法encode。
不指定的話就公開所有方法。

<exclude method=""/>:指定要防止被訪問的方法。
如:< exclude method="decode"/>,那么在JS中就不可以調用該方法decode。
include和exclude不能同時存在。

 

注:本文摘自http://1017401036.iteye.com/blog/2338998,在學習的時候覺得不錯,收藏一下。如覺得有侵權,可以刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM