一個非常好的DWR實例

 DWR(Direct Web Remoting)是一個WEB遠程調用框架.利用這個框架可以讓AJAX開發變得很簡單.利用DWR可以在客戶端利用JavaScript直接調用服務端的Java方法並返回值給JavaScript就好像直接本地客戶端調用一樣(DWR根據Java類來動態生成JavaScrip代碼).

DWR確實是一個非常優秀的項目,它通過反射,將java翻譯成javascript,然後利用回調機制,輕鬆實現了javascript調用Java代碼。

其大概開發過程如下:
1.編寫業務代碼,該代碼是和dwr無關的。
2.確認業務代碼中哪些類、哪些方法是要由javascript直接訪問的。
3.編寫dwr組件,對步驟2的方法進行封裝。
4.配置dwr組件到dwr.xml文件中,如果有必要,配置convert,進行java和javascript類型互轉。
5.通過反射機制,dwr將步驟4的類轉換成javascript代碼,提供給前臺頁面調用。
5.編寫網頁,調用步驟5的javascript中的相關方法(間接調用服務器端的相關類的方法),執行業務邏輯,將執行結果利用回調函數返回。
6.在回調函數中,得到執行結果後,可以繼續編寫業務邏輯的相關javascript代碼。

下面以用戶註冊的例子,來說明其使用。(注意,本次例子只是用於演示,說明DWR的使用,類設計並不是最優的)。

1.先介紹下相關的Java類

    User: 用戶類,
    public class User {
//登陸ID,主鍵唯一
private String id;
//姓名
private String name;
//口令
private String password;
//電子郵件
private String email;
       
//以下包含getXXX和setXXX方法
.......
    }

    UserDAO:實現User的數據庫訪問,這裏作爲一個演示,編寫測試代碼
    public class UserDAO {
      //存放保存的數據
      private static Map dataMap = new HashMap();

      //持久用戶
      public boolean save(User user) {
        if (dataMap.containsKey(user.getId()))
          return false;
        System.out.println("下面開始保存用戶");
        System.out.println("id:"+user.getId());
        System.out.println("password:"+user.getPassword());
        System.out.println("name:"+user.getName());
        System.out.println("email:"+user.getEmail());
        dataMap.put(user.getId(), user);
        System.out.println("用戶保存結束");
        return true;
      }

      //查找用戶
      public User find(String id) {
        return (User)dataMap.get(id);
      }
}

    DWRUserAccess:DWR組件,提供給javascript訪問的。

    public class DWRUserAccess {

        UserDAO userDAO = new UserDAO();

        public boolean save(User user) {
          return userDAO.save(user);
        }

        public User find(String id) {
          return userDAO.find(id);
        }
    }
 

    下面說明下程序執行的流程

    1.用戶在頁面上輸入相關注冊信息,id、name、password、email,點擊“提交”按鈕
    2.javascript代碼開始執行,根據用戶填寫相關信息,通過dwr提供的DWRUserAccess.js裏save的方法,調用服務器端的DWRUserAccess類save方法,將註冊信息保存。
    3.通過DWRUserAccess.jsp裏的find方法,調用服務器端DWRUserAccess類裏的find方法,執行用戶信息查找。

    注意,在以上的執行過程中,DWRUserAccess是供DWR調用的,是DWR組件,因此需要將DWRUserAccess類配置到dwr中。

    接下來講解本次dwr測試環境的配置。

    1.新建一個webapp,命名爲testApp
    2.將dwr.jar拷貝到testApp的WEB-INF的lib目錄下
    3.編譯上面的User,UserDAO,DWRUserAccess類,放到classes目錄下
    4.在web.xml中配置servlet,適配路徑到dwr目錄下,如下所示
      <servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <!--
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章