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