將java翻譯成javascript,然后利用回調機制,輕松實現javascript調用Java代碼,需要了解的小伙本們,一起看看吧。
DWR(Direct?Web?Remoting)是一個WEB遠程調用框架.利用這個框架可以讓AJAX開發變得很簡單.利用DWR可以在客戶端利用JavaScript直接調用服務端的Java方法并返回值給JavaScript就好像直接本地客戶端調用一樣(DWR根據Java類來動態生成JavaScrip代碼).它的最新版本DWR0.6添加許多特性如:支持Dom?Trees的自動配置,支持Spring(JavaScript遠程調用spring?bean),更好瀏覽器支持,還支持一個可選的commons-logging日記操作.
其大概開發過程如下:
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目錄下,如下所示
????
????
????
????
????
????
??????
??????
????
????
??????
??????
????
????
??
??
????
????
??
??以上的配置可以攔截testApp下所有指向dwr的請求,關于這個攔截器,我們會在后面介紹。
??5.WEB-INF下新建一個dwr.xml文件,內容如下:
??
nbsp;dwr?PUBLIC?"-//GetAhead?Limited//DTD?Direct?Web?Remoting?1.0//EN"?"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
??
??????
????
??
??這里我們把DWRUserAccess配置到了dwr中,create元素中,creater="new"表示每調用一次DWRUserAccess時,需要new一個這樣的類;javascript="DWRUserAccess",表示提供給前臺頁面調用的javascirpt文件是DWRUserAccess.js。
??convert元素用于數據類型轉換,即java類和javascript之間相互轉換,因為和前臺交換的是User對象,因此需要對此使用bean轉換,我們將在后面介紹這個類。
??4.編寫測試的HTML頁面?test.html
???nbsp;HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
好了,這篇輕松實現javascript調用Java代碼就講解到這,有哪里還不懂的地方,可以咨詢我們錯新技術頻道。
新聞熱點
疑難解答
圖片精選