Web服务器为移动终端创建数据容器的一种有效方法
2012-09-27刘平,李梅
刘 平, 李 梅
(1.西安财经学院 网络与现代教育技术中心,陕西 西安 710061;2.成都大学 信息与科学技术学院,四川 成都 610106)
Web服务器为移动终端创建数据容器的一种有效方法
刘 平1, 李 梅2
(1.西安财经学院 网络与现代教育技术中心,陕西 西安 710061;2.成都大学 信息与科学技术学院,四川 成都 610106)
提出并设计了一套在Web服务端为移动终端客户创建大小容器的方法和模式,使移动客户能够在服务器端创建临时容纳批量数据对象的大小容器,减少网上数据流量;客户的每次请求将小容器从大容器取出,按照需求对小容器数据进行同步处理,完后将该小容器根据用户的标识保存在大容器中,在整个请求处理完数据后,可将该小容器取消,节省内存开资,解决了并发过程可能产生的脏数据问题,这种设计模式在实际工程行之有效,已经推广应用。
Web服务器;容器;Servlet;通信端口;数据流;过滤流
移动终端访问Web应用服务器是当今移动商务软件技术的主要内容之一,这类模式业务要求不同的移动终端在和应用服务器进行交互时,既可以共享服务器提供的数据,又可以在服务器端建立自己的容器对象,在交互期间临时将客户端要处理的批量数据对象存储在该容器中,这就要求服务器端给移动终端提供通用的容器来处理存在容器中的数据对象。本文正是为此设计一套Web服务器端的容器模式。
1 移动终端和Web服务器通信端口设计
从手机客户端访问Web服务器业务逻辑在设计时需要考虑两方面的内容:手机客户端和Web服务器端。下面分别进行详述。
1.1 移动终端设计
移动终端设计主要考虑3方面的内容。
1)移动终端的每次请求应当发送给Web服务器的数据(类型),包括下面内容。
用户的标识号:用来主要告诉Web服务器是那个客户发来的请求;
用户需要Web服务器执行的命令:用来主要告诉Web服务器该客户要求服务器干什么;
用户发给服务器要处理的数据:主要将手机请求数据发给服务器。
2)移动终端接收Web服务器响应的数据,包括下面内容。
Web服务器返回给手机端的数据:一般打包在一个字节数组中,再通过(如Java)相应数据流和过滤流对象将该字节数组中的不同类型的数据按次序解析出来,根据需要显示在移动终端的界面组件上。
3)移动终端启动下一个组件[1]处理相应的数据,包括下面内容。
移动终端将需要处理的数据传递给下一个组件并加载启动下一个组件。
1.2 服务器端设计
服务器端实际主要考虑数据通信端口问题,即数据的接收和发送问题。需要考虑以下内容。
1)接收移动终端发送到服务器端的数据信息,包括用户的标识号、命令约定和处理数据等。
2)提取和解析移动终端发到服务器端的数据信息。
3)将提取的数据信息提交给服务器端逻辑处理。
4)将处理完的数据通过数据流和过滤流[2]返回(响应)给移动终端。
2 系统实现案例
下面以Android手机作为移动终端,以Servlet[3]作为服务器端通信端口,在工程实践中设计了一套在服务器端存储批量数据的大小容器,具体内容如下。
2.1 移动终端的实现
移动终端要访问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的部分代码(方法)。
2.2 服务器端的实现
将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)存入大容器。如果这个用户没有小容器,就直接给其创建一个小容器,交互过程完后,清除该小容器。
2.3 大容器的实现
实现大容器本质上就是对每个用户的标识(如ID)要创建一个小容器,如List对象,然后针对该客户标识将其临时在服务器端创建的小容器存入大容器中,我们这里首选的技术就是采用Map接口对象。
2.4 小容器的实现
小容器是为每个请求移动终端在Web服务器端的Servlet通信端口创建一个临时的存储批量数据的List对象,将客户临时存在Web服务端的批量数据对象存于该List对象中,当用户需要处理其数据对象时,从大容器中取出,处理完后再根据用户标识存于大容器。
2.5 实例代码
下面是Servlet通信端口子类中实现的代码
以上设计和代码经过工程实践和测试,行之有效。完全可以将移动终端在Web服务器端的临时批量数据以设计的模式存储于服务器端,在处理完这些数据后,将其从服务端消除。
3 结束语
根据以上的分析、设计和实践,我们可以很方便地在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—),女,陕西佳县人,工程师。研究方向:移动商务。