最近寫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中。
- <servlet>
- <display-name>DWR Servlet</display-name>
- <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>
也可以從http://directwebremoting.org/dwr/introduction/getting-started.html中拷貝。
4、添加dwr.xml。
在/WEB-INF新建dwr.xml,名稱必須為dwr.xml不能隨便取。內容為:
- <!DOCTYPE dwr PUBLIC
- "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
- "http://getahead.org/dwr/dwr30.dtd">
- <dwr>
- <allow>
- <!-- 調用系統類 -->
- <create creator="new" javascript="JDate">
- <param name="class" value="java.util.Date"/>
- </create>
- <!-- 調用自定義的類:帶一個參數 -->
- <create creator="new" javascript="Base64">
- <param name="class" value="com.wjl.test.Base64"></param>
- </create>
- </allow>
- </dwr>
具體什么意思可以先不了解,也可以去官網上看或者下載附件進行了解。 官網鏈接: http://directwebremoting.org/dwr/introduction/getting-started.html。
我這里除了定義了一個系統自帶的java.util.Date,還有一個自定義的com.wjl.test.Base64,其代碼如下:
- public class Base64 {
- // 加密
- public static String encode(String str) {
- byte[] b = null;
- String s = null;
- try {
- b = str.getBytes("utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- if (b != null) {
- s = new BASE64Encoder().encode(b);
- //據RFC 822規定,每76個字符,還需要加上一個回車換行去掉換行符
- s = s.replaceAll("[\\s*\t\n\r]", "");
- }
- return s;
- }
- // 解密
- public static String decode(String s) {
- byte[] b = null;
- String result = null;
- if (s != null) {
- BASE64Decoder decoder = new BASE64Decoder();
- try {
- b = decoder.decodeBuffer(s);
- result = new String(b, "utf-8");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- }
5、新建jsp頁面進行調用。
a、在webRoot根目錄下新建testDwrDemo.jsp,html代碼為:
- <input type="button" value="獲取當前月份" onclick="getMonth();" /><br />
- 當前月份:<span id="curMonth"></span>
- <br />
- <br />
- 加密數據:<input type="text" id="encodeStr" size="45"/><br />
- 加密后:<input type="text" id="encodeResult" size="45"/><br />
- <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類中的方法。
- function getMonth(){
- /*
- //JDate:與自定義的js文件名稱相同,也與dwr.xml文件中定義的javascript屬性值相同
- JDate.getMonth(function(data){
- alert("當前月份:"+(data+1));
- document.getElementById("curMonth").innerHTML=(data+1);
- });
- */
- //也可以寫成:
- JDate.getMonth(callback);
- }
- function callback(data){
- alert("當前月份:"+(data+1));
- document.getElementById("curMonth").innerHTML=data;
- }
- //該方法用來加密
- function encode(){
- var str = document.getElementById("encodeStr").value;
- var str2 = Base64.encode(str,function callback(returnData) {
- alert(returnData);
- document.getElementById("encodeResult").value=returnData;
- });
- }
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,在學習的時候覺得不錯,收藏一下。如覺得有侵權,可以刪除

