摘 要:針對目前手機訂餐系統(tǒng)客戶端與服務器端數據傳輸效率低,以及訂餐后臺管理系統(tǒng)架構可擴展性較弱,本文提出并實現了一種基于Android和JavaEE的手機訂餐系統(tǒng)。訂餐客戶端采用Json數據格式與服務器端進行數據交互,提高了網絡數據傳輸效率。訂餐后臺管理系統(tǒng)采用SSH2+DWR整合框架使得展示層、業(yè)務層以及數據持久層三層分離,降低了系統(tǒng)的耦合性,提高了系統(tǒng)的擴展性與可維護性。實踐證明,該架構實現的訂餐系統(tǒng)能提高餐館或者酒店的點菜服務質量以及網上訂餐效率。
關鍵詞:Android;SSH2;數據模型;Json數據格式;DWR
中圖分類號:TP311.52 文獻標識碼:A
1 引言(Introduction)
隨著計算機和通信設備網路技術的不斷發(fā)展,人們對移動設備特別是Android移動終端開發(fā)出功能強大、界面美觀且操作簡易的應用程序提出了更高的要求[1]。JavaEE是當前比較流行的Web服務應用框架[2],Android移動終端如何與JavaEE服務器端進行數據交互成為新的研究熱點[3]。隨著人們工作的繁忙、生活節(jié)奏的加快、有部分人沒有充足的時間到餐館或者酒店就餐,他們希望通過智能手機在網上進行訂餐。如何利用基于Android的智能手機終端開發(fā)移動App,向顧客提供一種便捷、高效的餐飲服務具有重要的現實意義和廣泛的應用價值。文獻[4—7]雖然設計并實現了基于Android平臺的訂餐系統(tǒng),但服務器端采用普通的Servlet控制器與Android客戶端進行數據交互,對后期服務器的擴展具有一定的局限性,同時服務器端與手機客戶端數據交互采用xml文件格式,數據傳輸效率有待提高。文獻[8]雖然服務器端采用的是WebService與手機客戶端進行數據交互,但對訂餐后臺管理系統(tǒng)的架構研究較少,因此,本文提出并實現了一種基于Android和JavaEE的手機訂餐系統(tǒng),服務器端采用Struts2+Spring4+Hibernate4+DWR整合框架,該整合框架可以提高后臺管理系統(tǒng)的用戶使用體驗,手機客戶端與服務器端的數據交互采用JSON格式,可以提高網絡數據的傳輸效率。該系統(tǒng)是對現有訂餐系統(tǒng)的一種補充,對類似系統(tǒng)的開發(fā)具有一定的參考價值。
2 系統(tǒng)設計(Design of system)
2.1 系統(tǒng)功能總體設計
基于Android和JavaEE的訂餐系統(tǒng)包含基于Android的手機訂餐模塊和基于JavaEE的訂餐后臺管理模塊。基于Android的手機訂餐模塊包括顧客登錄和廚師登錄。顧客登錄成功后可以瀏覽菜品、添加購物車、查看我的訂單,以及對菜品進行評價。
廚師登錄成功后可以瀏覽訂單、修改菜品制作狀態(tài)?;贘avaEE的訂餐后臺管理模塊包括系統(tǒng)管理、菜品類別管理、菜譜管理、訂單管理、菜品留言管理、菜品評價管理和結算管理等功能。系統(tǒng)總體功能設計如圖1所示。
2.2 系統(tǒng)架構總體設計
系統(tǒng)架構總體設計采用Android手機客戶端訪問JavaEE服務器端的C/S架構與訂餐后臺管理系統(tǒng)通過Web瀏覽器訪問JavaEE服務器端的B/S架構相結合的架構模式,其中,JavaEE服務器端直接訪問應用數據庫進行數據存取,并將數據返回給Android手機客戶端和Web瀏覽器。系統(tǒng)總體架構如圖2所示。
整個系統(tǒng)的數據執(zhí)行流程為服務器端的訂餐后臺管理系統(tǒng)通過Web瀏覽器向服務器端請求存取數據操作如添加菜品類型和菜譜信息,服務器端接收請求數據后將數據存入數據庫,并將存入數據庫中的數據返回服務器端,服務器端再將數據返回瀏覽器。Android手機客戶端要顯示菜品信息需要聯網請求服務器,服務器再根據需求訪問數據庫,數據庫系統(tǒng)處理完數據后將數據返回服務器端,服務器端將數據轉換成Json格式后再返回給Android手機客戶端。從整個系統(tǒng)數據流的執(zhí)行過程來看,Android手機客戶端和Web瀏覽器共用了JavaEE服務器端從而完成了數據的交互。
2.3 系統(tǒng)服務器架構設計
從系統(tǒng)總體設計的數據流執(zhí)行過程來看,Android手機客戶端和Web瀏覽器共用了同一個服務器端,因此服務器端的架構設計就顯得尤為重要。在JavaEE平臺下,服務器端的架構大都采用三層架構,比較典型的框架有采用MVC模式的Jsp+Servlet+JavaBean、Struts+Spring+Hibernate(SSH)和Struts2+Spring4+Hibernate4(SSH2)。其中Jsp+Servlet+JavaBean框架雖然采用MVC模式將顯示層、控制層和模型層分開,但由于Servlet和JavaBean負責了大量的運算和業(yè)務處理工作,程序處理效率較為低下。SSH框架雖然也將視圖層、控制器與模型的徹底分開,但由于Struts框架存在線程安全、捕獲輸入較難,以及視圖展示都弱于Struts2框架等問題[9],因此本系統(tǒng)服務器端的架構方案采用SSH2整合框架,整個系統(tǒng)架構設計如圖3所示。
在Struts2+Spring4+Hibernate4整合框架中,Struts2主要用于Web展示和業(yè)務控制,Spring4主要用于業(yè)務實現和事務管理,而Hibernate4則用于數據持久化處理。在Struts2中Web瀏覽器請求服務器端的JSP頁面,JSP調用Struts2中的Action完成數據的交互,而手機客戶端則直接調用Struts2中的Action完成數據的交互。不論是Web端的JSP請求Struts2中的Action還是手機客戶端請求Struts2中的Action,都需要通過Struts.xml配置文件實現業(yè)務處理或頁面跳轉等動作。Action最終將業(yè)務層的執(zhí)行結果返回給Web瀏覽器或者手機客戶端。Spring4負責處理業(yè)務邏輯及事務管理,并將Struts2層傳遞過來的數據依賴注入到持久層。在持久層中,Hibernate4是一個功能強大的ORM工具,它主要包括對數據源的配置、POJO組件以及DAO組件的管理,處理DAO組件的數據,并將處理結果返回給業(yè)務層,業(yè)務層再將數據返回給表示層,最終通過瀏覽器或者手機客戶端展示數據。
3 系統(tǒng)實現(Implementation of system)
3.1 訂餐系統(tǒng)服務器端數據封裝
在基于JavaEE的訂餐后臺管理系統(tǒng)中,服務器端數據的封裝既可以是JSON數據格式也可以是XML數據格式,由于JSON數據格式封裝的數據在網絡傳輸與解析中優(yōu)于XML數據[10],因此在本系統(tǒng)中服務器端的數據采用JSON封裝。JSON即JavaScript Object Natation,它主要用于Web服務器與JavaScript或者手機客戶端進行交互的一種純文本的數據處理格式。該數據處理格式既可以處理字符串類型、數字類型、布爾類型、數組類型,也可以處理對象。在項目開發(fā)中,可以將字符串String、Object對象、JavaBean對象、List集合、數組對象、Map集合、Set集合等按照一定的算法封裝成JSON格式的數據。在本系統(tǒng)開發(fā)中,服務器首先從數據庫服務器獲取數據,然后將數據存入List集合中,再將List集合中的數據封裝成JSON數據格式,List集合數據封裝成JSON格式數據的主要實現代碼如下:
public static String getJson(List<?>foodList) {
StringBuffer stringBuffer=new StringBuffer();//創(chuàng)建可改變的字符串對象stringBuffer
//向stringBuffer對象中追加數據
stringBuffer.append("{");stringBuffer.append("\"showGoodsList\":");
stringBuffer.append("[");
//獲取訂餐列表foodList中值的大小
int length=foodList.size();
//將foodList中的值轉換成JSON數據格式
if(length>0)
{
if (foodList!=null) {
for (Object obj:foodList) {
stringBuffer.append(getJson(obj));
stringBuffer.append(",");
}
stringBuffer.setCharAt(stringBuffer.length()-1,']');
stringBuffer.append("}");
}
}
else {
stringBuffer.append("]}");
}
return stringBuffer.toString();
}
在上述算法中,需要首先通過菜品信息管理界面將菜品信息添加到數據庫中,然后Android客戶端在訪問菜品信息時再從數據庫中按照一定的條件查詢出數據,再將查詢出來的數據封裝到List集合中,再將封裝好的List集合數據采用本算法封裝成JSON數據格式,并將該格式數據傳遞給Android客戶端。
3.2 訂餐系統(tǒng)客戶端數據解析
在Android應用系統(tǒng)開發(fā)中,Android客戶端經常與服務器端進行數據通信。由于在本系統(tǒng)中服務器端的數據都是封裝成JSON格式的數據,因此在Android手機客戶端解析JSON數據就顯得尤為重要。在Android客戶端解析用List類型封裝的JSON格式的數據代碼實現如下:
public ListgetFoodList() {
List
通過上述Android客戶端解析用List類型封裝的JSON格式數據后,將得到的List類型數據通過SimpleAdapter適配器將數據映射到Android XML文件上,得到菜品數據列表。
3.3 SSH2+DWR整合框架應用
在基于JavaEE的訂餐后臺管理系統(tǒng)中,Web頁面經常要與服務器端進行數據交互,而大多數Web頁面希望與服務器進行數據交換時只能局部刷新頁面,這樣能提高用戶的使用體驗,而要實現Web頁面局部刷新,可以采用Ajax框架,而Ajax框架有很多,如Extjs、Gwt、Dwr、JQuery等,其中DWR(Direct Web Remoting)是Getahead推出的基于java的Ajax框架,它能夠將服務器端的java代碼轉換成JavaScript中引用的對象,從而簡化客戶端javaScript的編程。為了提高Web頁面中Javascript編程效率,本系統(tǒng)采用DWR框架與SSH2框架整合應用實現后臺管理系統(tǒng)功能,其整合步驟如下:
(1)在web.xml文件中配置DwrServlet來加載DWR框架,部分代碼如下:
org.directwebremoting.servlet.DwrServlet
...
...
(2)在WEB-INF工程下面創(chuàng)建dwr.xml文件,在該文件中通過creator屬性定義服務器端的java類的產生方式。如果creator="new",則直接調用普通的類,如果creator="spring",則通過Spring文件中的bean組件找到需要調用的java類,并將該java類生成javaScript代碼供jsp調用。在本系統(tǒng)中dwr采用Spring文件的方式將java類生成javaScript的部分代碼如下:
在該代碼中,spring文件中bean組件所對應的代碼為:
而UserServiceImpl所對應的java類代碼如下:
public class UserService Implimplements IUserService{
{...}
}
在jsp中要用dwr框架來調用服務器端產生的javaScript代碼,需要在jsp中導入DWR核心庫文件util.js、engine.js,以及動態(tài)生成的js庫文件DWRUser.js。Jsp中通過DWR調用java類中的方法的部分代碼如下:
4 結論(Conclusion)
本文提出了基于Android和JavaEE訂餐系統(tǒng)的設計與實現,整個系統(tǒng)由Android手機客戶端、JavaEE服務器端和數據庫三部分組成。JavaEE服務器端采用SSH2整合框架將服務器端的架構分為展示層、業(yè)務邏輯層以及數據持久層,這樣不
參考文獻(References)
[1] Xinjun Xu,Liu Yue,Du Cui.Design and Implementation of Personnel Location System Based on Android.Proceedings of 2014 International Conference on Advances in Materials Science and Information Technologies in Industry(AMSITI 2014)[C].Applied Mechanics and Materials,2014:1038-1041.
[2] Zhenwu Wang.A Rapid Development Framework of Enterprise Information System Based on Components and JavaEE.Computer Science and its Applications:Ubiquitous Information Technologies,6th FTRA International Conference on Computer Science and its Applications(CSA 2014)[C].Springer Berlin Heidelberg,2015:639-645.
[3] Jiantao Zhao,Chen Feng.Design and implementation of mobile operation maintenance management system based on Java EE and Android.2015 6th IEEE International Conference on Software Engineering and Service Science(ICSESS 2015)[C].IEEE,2015:349-352.
[4] 凡海飛.基于Android平臺的無線點菜系統(tǒng)的設計與實現[D].華中科技大學,2011.
[5] 符濤.基于Android平臺的WLAN自助訂餐系統(tǒng)設計與實現[D].西安電子科技大學,2013.
[6] 林星錦.基于Android平臺的無線訂餐系統(tǒng)的設計與實現[D].北京交通大學,2013.
[7] 栗鑫林.基于移動手機平臺的智能點餐系統(tǒng)的設計與實現[D].電子科技大學,2014.
[8] 蔡奕彬,等.基于Web Service的Android餐飲點菜系統(tǒng)的設計與實現[J].計算機與現代化,2013,(4):120-124.
[9] 張磊.基于SSH2架構的電子商務系統(tǒng)設計與實現[D].黑龍江大學,2011.
[10] 高靜,段會川.JSON數據傳輸效率研究[J].計算機工程與設計,2011,32(7):2267-2270.
作者簡介:
羅國濤(1982-),男,碩士,副教授.研究領域:軟件工程,移
動應用開發(fā).