劉 平, 李 梅
(1.西安財經學院 網絡與現代教育技術中心,陜西 西安 710061;2.成都大學 信息與科學技術學院,四川 成都 610106)
Web服務器為移動終端創建數據容器的一種有效方法
劉 平1, 李 梅2
(1.西安財經學院 網絡與現代教育技術中心,陜西 西安 710061;2.成都大學 信息與科學技術學院,四川 成都 610106)
提出并設計了一套在Web服務端為移動終端客戶創建大小容器的方法和模式,使移動客戶能夠在服務器端創建臨時容納批量數據對象的大小容器,減少網上數據流量;客戶的每次請求將小容器從大容器取出,按照需求對小容器數據進行同步處理,完后將該小容器根據用戶的標識保存在大容器中,在整個請求處理完數據后,可將該小容器取消,節省內存開資,解決了并發過程可能產生的臟數據問題,這種設計模式在實際工程行之有效,已經推廣應用。
Web服務器;容器;Servlet;通信端口;數據流;過濾流
移動終端訪問Web應用服務器是當今移動商務軟件技術的主要內容之一,這類模式業務要求不同的移動終端在和應用服務器進行交互時,既可以共享服務器提供的數據,又可以在服務器端建立自己的容器對象,在交互期間臨時將客戶端要處理的批量數據對象存儲在該容器中,這就要求服務器端給移動終端提供通用的容器來處理存在容器中的數據對象。本文正是為此設計一套Web服務器端的容器模式。
從手機客戶端訪問Web服務器業務邏輯在設計時需要考慮兩方面的內容:手機客戶端和Web服務器端。下面分別進行詳述。
移動終端設計主要考慮3方面的內容。
1)移動終端的每次請求應當發送給Web服務器的數據(類型),包括下面內容。
用戶的標識號:用來主要告訴Web服務器是那個客戶發來的請求;
用戶需要Web服務器執行的命令:用來主要告訴Web服務器該客戶要求服務器干什么;
用戶發給服務器要處理的數據:主要將手機請求數據發給服務器。
2)移動終端接收Web服務器響應的數據,包括下面內容。
Web服務器返回給手機端的數據:一般打包在一個字節數組中,再通過(如Java)相應數據流和過濾流對象將該字節數組中的不同類型的數據按次序解析出來,根據需要顯示在移動終端的界面組件上。
3)移動終端啟動下一個組件[1]處理相應的數據,包括下面內容。
移動終端將需要處理的數據傳遞給下一個組件并加載啟動下一個組件。
服務器端實際主要考慮數據通信端口問題,即數據的接收和發送問題。需要考慮以下內容。
1)接收移動終端發送到服務器端的數據信息,包括用戶的標識號、命令約定和處理數據等。
2)提取和解析移動終端發到服務器端的數據信息。
3)將提取的數據信息提交給服務器端邏輯處理。
4)將處理完的數據通過數據流和過濾流[2]返回(響應)給移動終端。
下面以Android手機作為移動終端,以Servlet[3]作為服務器端通信端口,在工程實踐中設計了一套在服務器端存儲批量數據的大小容器,具體內容如下。
移動終端要訪問Web服務,和Web服務器的Servlet端口要通信,需要遵守下列步驟。
1)根據要訪問網站的Uri創建請求對象HttpPOst/HttpGet[4]等。
2)創建一系列的表單NamespaceValuesPair對象 (鍵值對),將這些對象存放到List容器。
3)再用通過該 List和 Encoding方式創建 UrlEncoded FormEntity對象。
4)將UrlEncodedFormEntity對象提交給HttPost/HttpGet[5]對象。
5)進一步同過DefaultHttpClient對象將請求對象HttpPost對象發向Web服務器的數據通信端口Servlet根據App Server的返回(響應)結果創建HttpResponse對象。
6)再通過HttpResponse獲取Web服務器端響應的數據(字節數據)
7)根據字節數組創建DataInputStream對象,用其一系列readXxx()方法,從字節數組中取出數據,將數據顯示在Android的View組件上[6]。
這里需要考慮Android通過Http協議訪問Web服務器時可能存在數據安全問題,因此對于比較重要的信息(如資金)一般采用Https協議,每次請求要求驗證用戶身份。下面為Android手機提交數據給Web服務器端口Servlet的部分代碼(方法)。



將Web服務器暴露的業務邏輯,如Spring的Beans通過IOC技術注入到創建的通信端口Servlet中,移動終端每次訪問 Web 服務器,就會在 Servlet的 doGet(HttpServletResquest,HttpServletResponse)或 doPost(HttpServletResquest,HttpServlet Response)方法傳遞下面2個對象:
1)HttpServletResquest[7]通過第一個對象取出手機端發來的數據:如客戶號、客戶命令和客戶數據,在Servlet中將這些數據信息提出解析后,將需要處理的數據傳遞給Spring的Beans邏輯對象,完成服務器端計算。
2)HttpServletResponse通過該對象創建一個DataOutput Stream包裝流對象,用其一系列的writeXxx()方法將服務器端的數據返回(響應)給移動終端。
在整個業務流程中,移動終端的每一次請求,服務器邏輯首先判斷是哪個注冊用戶在請求,如果這個用戶已經有了小容器,從大容器中取出該用戶的小容器,處理數據存儲業務,完后將小容器根據客戶標識(Key)存入大容器。如果這個用戶沒有小容器,就直接給其創建一個小容器,交互過程完后,清除該小容器。
實現大容器本質上就是對每個用戶的標識(如ID)要創建一個小容器,如List對象,然后針對該客戶標識將其臨時在服務器端創建的小容器存入大容器中,我們這里首選的技術就是采用Map接口對象。
小容器是為每個請求移動終端在Web服務器端的Servlet通信端口創建一個臨時的存儲批量數據的List對象,將客戶臨時存在Web服務端的批量數據對象存于該List對象中,當用戶需要處理其數據對象時,從大容器中取出,處理完后再根據用戶標識存于大容器。
下面是Servlet通信端口子類中實現的代碼



以上設計和代碼經過工程實踐和測試,行之有效。完全可以將移動終端在Web服務器端的臨時批量數據以設計的模式存儲于服務器端,在處理完這些數據后,將其從服務端消除。
根據以上的分析、設計和實踐,我們可以很方便地在Web服務器端為每個注冊的移動終端客戶創建一個臨時的小容器,存儲自己在服務器端的批量數據對象,在客戶每次請求時將小容器從大容器取出,按照需求對小容器中數據對象進行同步增刪改操作,完后將這個小容器根據用戶的標識保存在大容器中[8],在整個請求處理完數據后,可將這個小容器刪除。這樣既節省了內存開資,又解決了移動終端并發訪問Web容器可能存在的臟數據[9]問題。實踐證明這種設計模式很有效,可以廣泛推廣應用。
[1]王向輝,張國印,沉潔.Android應用程序開發[M].北京:清華大學出版社,2010.
[2]廖文奎.Struts編程基礎與實例精講[M].北京:中國電力出版社,2006.
[3]彭晨陽.Java實用系統開發指南[M].北京:機械工業出版社,2004.
[4]羅會波.JSF第一步[M].北京:清華大學出版社,2007.
[5]汪永松.Android平臺開發之旅 [M].北京:機械工業出版社,2010.
[6]余志龍.Google Android SDK開發范例大全[M].北京:人民郵電出版社,2009.
[7]劉京華.Java Web整合開發王者歸來[M].北京:清華大學出版社,2010.
[8]趙瑞國,馬杰,何志勇,等.液體火箭發動機高速采集數據工程數據庫設計及應用[J].火箭推進,2011(3):60-64,72.
ZHAO Rui-guo,MA Jie,HE Zhi-yong,et al.Design and application of high-speed acquisition database for liquid rocket engine[J].Journal of Rocket Propulsion,2011(3):60-64,72.
[9]陳天河.Hibernate項目開發寶典[M].北京:電子工業出版社,2006.
An efficient method creating the big&small container for MID in side of Web server
LIU Ping1,LI Mei2
(1.Information&Modern Education Technique Center,Xi'an University of Finance and Economics,Xi’an710061,China; 2.Institute of Information&Science Technology,Chengdu University,Chengdu610106,China)
Bring up and design an efficient method to create the data object containers for MID in side of Web Server(Application Server), which enable the MID customers to build the temporary container conserving the quantity data,cutting flow rate transmitting through Internet and Wireless net;For each customer’s request,the small container is gotten from the big one in the Web side,and the data objects are synchronously dealt with according to the needs,and then they are put the small container again after finished.Finally,the small container is step foreword put to the big one by referring to the only value of each customerID or username.After the request done,the small containers are cancelled from the big one and the duty data problem solved during the many customers accessing Web server in the same time.It is proved by practice that this method provide the efficient reference for those who is engaged in mobile business software development.
Web Server; Container; Servlet; Communication Port; DataStream; FilterStream
TP393.02
A
1674-6236(2012)04-0109-04
2011-12-19 稿件編號:201112111
國家科技部科技型中小型企業技術創新基金項目((CA04)04C26216110880)
劉 平(1959—),女,陜西佳縣人,工程師。研究方向:移動商務。