• 3.11 MB
  • 2022-09-27 发布

毕业论文--基于android 无线电子菜谱系统开发(含外文翻译)

  • 59页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
苏州科技学院本科生毕业设计(论文)基于Android无线电子菜谱系统开发(服务器端)摘要今天我们生活在充满数字的时代,随着GPRS、WLAN等无线技术的突飞猛进,移动生活、移动办公逐渐由概念转为现实,信息数据随手可及。特别是无线数据传输技术的成熟,运营商的大力推广,WLAN的应用日渐普及,并日益影响到人们生活的方方面面,种种梦想化为现实成为了可能。对于传统的餐饮业而言,利用无线网络技术实现点餐系统也成为了现实。基于Android的无线点餐系统,使用当下较为流行的Android平台,通过和服务器之间的WLAN无线通信实现了灵活、高效、便捷的管理系统,优化了点餐和管理流程,使餐厅的服务和管理得到实质性的提升,提高了品牌形象和核心竞争力。本文详细描述了基于Android无线电子菜谱系统服务器端的需求分析和系统设计,利用Struts、Spring、Hibernate和Axis2实现了一套无线点餐的Web端后台管理系统,同时向系统外部发布包括用户登录,餐桌管理,点菜管理、并台管理、转台管理、查台管理、结台管理、更新管理等的WebService接口,方便用户在包括Android等在内的各种平台上调用,以实现无线点餐的功能。最后对该系统的特点进行了总结,并展望了其未来的发展方向。关键词:无线通信;Android;服务器端;WebService餐饮55\n苏州科技学院本科生毕业设计(论文)DevelopmentofWirelessOrderSystembasedonAndroid(ServiceSide)AbstractTodayweliveinadigitalera,withtherapidprogressoftheGPRS,WLANandotherwirelesstechnologies,mobilelife;mobileofficegraduallybecomestotruefromconcept,youcangettheinformationanddataeverywhere.Inparticular,thegrowingpopularityofwirelessdatatransmissiontechnologymatures,thepromotioneffortsoftheoperators,thepopularityofWLANapplicationsgrows,andisincreasinglyaffectingallaspectsofpeople'slives,it’spossibleforallkindsofdreamscomesintoreality.Asfortraditionalcateringindustry,theuseofwirelessnetworktechnologytoachieveorderingsystemhasalsobecomestoreality.Android-basedwirelessorderingsystem,usingthepopularAndroidplatform,buildaflexible,efficientandconvenientmanagementsystemtooptimizetheorderingandmanagementprocessthroughwirelesscommunicationsbetweentheWLANandserver,thiswillincreasetherestaurantserviceandmanagementsubstantialandimprovebrandimageandcorecompetitiveness.ThispaperdescribesindetailthecontentsoftherequirementandsystemdesignofWirelessOrderingSystem,UseofStruts,Spring,HibernateandAxis2Websideoftheback-officemanagementsystem,andreleasetheuserlogon,tablemanagement,orderingmanagement,combinationmanagement,changetablemanagement,checktablemanagement,settleaccountsmanagement,updatemanagement,andotherWebServiceinterface,itcanbecalledonavarietyofplatforms,includingAndroid,etc.,inordertoachieveawirelessorderingfunction.Thispaperfinallysummarizesthesystemcharacteristicsandprospectsofitsfuturedevelopment.Keywords:Wirelesscommunication;Android;server;WebService55\n苏州科技学院本科生毕业设计(论文)目录1引言11.1选题背景和意义11.2无线点餐系统简介21.3本文的主要工作及组织结构21.3.1本文的主要工作:21.3.2本文的组织结构32需求分析42.1功能需求42.2用户群体描述52.3业务流程分析62.3.1访客浏览62.3.2点菜流程62.3.3结账流程72.3.4管理用户信息82.4数据通讯83概要设计103.1系统结构设计103.2总体功能模块设计113.3模块功能概要设计113.3.1菜单管理模块113.3.2餐桌管理模块123.3.3订单管理模块123.3.4用户管理模块123.3.5WebService接口124数据库设计134.1数据库的需求分析134.2数据库概念设计134.3数据库逻辑设计154.4数据库的实现155详细设计185.1菜单管理模块设计195.1.1整体设计195.1.2管理员输入信息的传递195.2订单管理模块设计205.2.1整体设计205.2.2用户点餐功能215.2.3邮件通知功能215.2.4换桌、并桌功能215.2.4结账功能225.3用户管理模块设计225.3.1整体设计225.3.2用户注册功能225.3.3角色管理功能225.3.3个人信息修改功能225.4WebService接口设计2255\n苏州科技学院本科生毕业设计(论文)6系统实现246.1开发环境及相关技术246.2功能模块的实现266.2.1菜单管理功能模块的实现266.3点菜功能模块的实现276.3.1添加菜品的实现276.3.2邮件通知的实现286.4主要界面286.5数据库操作347测试报告377.1测试方案377.2测试项目377.3主要测试用例387.4测试进度407.5测试方法417.6测试结果分析417.6.1测试的局限性417.6.2评价测试结果的准则41总结42致谢43参考文献44附录A译文45附录B外文原文5155\n苏州科技学院本科生毕业设计(论文)1引言本章主要简述无线点餐系统的选题背景和意义,并对本文的工作和组织结构做了介绍。1.1选题背景和意义餐饮传统的点菜方式是纯人工操作,由服务员记录顾客点的菜,然后将点菜的信息分别交由吧台收银、酒水、传菜部、后厨等部门,同时收银员要把所有的点菜单输入电脑中,才能生成相应的单据进行结算。在具体工作中容易出现以下问题:(1)手写单据字迹潦草从而导致上错菜、少上菜现象严重(2)加菜和查账程序较繁琐(3)处理特殊口味有遗漏和偏差(4)客人催菜遗忘现象较频繁(5)计算账单易出错(6)不方便人员管理等等。正因如此,无线点餐模式应运而生。采用无线点菜系统,服务员在点菜时就完成了输单过程,发送后系统自动分类,各部门立即分单打印,避免服务人员的来回跑动,节约时间,工作效率极大提高,工作流程更加合理、科学它不仅可以有效地提高餐饮业的工作效率,更可以规范服务体系,提高整体服务质量和管理水平,并为规模化经营提供了坚实的技术基础。相比于传统餐饮行业使用纸质菜单作为主要信息媒介的点菜方式,使用无线点餐系统的优势体现在一下方面:(1)提高工作效率。采用无线点菜系统,服务员在点菜时就完成了输单过程,发送后系统自动分类,各部门立即分单打印,避免服务人员的来回跑动,节约时间,工作效率极大提高,工作流程更加合理、科学。(2)降低企业经营成本。可以随时调整菜谱(沽清、修改价格、更改图片等),如果是传统方式点菜,随着时间的推移,经常要变动菜谱,浪费纸张,费时费力。(3)创建良好就餐环境,提升企业形象。55\n苏州科技学院本科生毕业设计(论文)传统的点菜方式要求服务员要有传递单据的过程,在营业高峰期时,服务员为提高服务效率会经营跑动,造成餐厅混乱。而使用无线点菜系统,服务员就可在餐厅中完成各种操作,避免因服务员来回跑动产生的忙乱现象,大大提升服务品质和服务形象,营造高档就餐环境,吸引更多的顾客。使用终端触屏点菜还可以让顾客看到更多的有关菜的信息,包括中英文菜品介绍、营养成分介绍、视音频等,同时友好的用户界面加上触摸及遥控技术可让顾客享受点餐的乐趣,极大提升餐厅档次和企业形象。在人们生活节奏越来越快的今天,相信无线点餐系统一定会有广阔的发展前途。1.2无线点餐系统简介无线点餐系统是针对餐饮行业的信息化服务和管理而开发的软件平台。该系统利用WLAN无线通信技术实现服务器端和客户端的通信。提供Web端管理平台,管理员可以对餐厅的环境介绍、菜谱、餐桌进行添加、更新等操作。同时服务器端将这些功能通过WebService发布给外部系统,能够让Android移动平台上的无线点餐系统客户端调用。点菜环节上,客户端通过调用服务器端的开台、点餐、并台、换台、结算等功能,让服务员可以用Android手持设备在客人餐桌旁完成信息的录入,在服务器端生成订单,大大简化了点菜流程。顾客可以在点菜的同时直观的看到菜品信息,带给顾客良好的体验。1.3本文的主要工作及组织结构1.3.1本文的主要工作:无线点餐系统服务器端是整个点餐系统的后台运行支持:(1)在实现方式上服务器端和客户端通过WLAN,利用WebService进行通信,使得服务器端只需要关注点餐数据的处理,而不需要对客户端发送的请求进行解析,相比较于HTTP请求的方式,不需要对每次通信进行确认,提高了数据交换的效率。同时,WebService是一种跨平台的通信方式,可以使用Android或者WindowsPhone的手机或平板作55\n苏州科技学院本科生毕业设计(论文)为客户端,使得系统的搭建变得灵活。(2)在功能方面无线点餐系统考虑到生活中点餐的实际,提供了用户登录,餐桌管理,点菜管理、并台管理、转台管理、查台管理、结台管理、更新管理、打印订单等在内的功能,并在用户提交订单之后,服务器端向用户注册的邮箱内发送一封点餐成功的邮件作为确认。(3)在系统升级方面管理员可以通过后台的Web端管理界面对菜品信息、餐桌信息进行添加、删除和更新管理。服务器端的数据有改变的时候,客户端可以通过更新操作取得服务器端的最新数据,从而保持数据的一致性。1.3.2本文的组织结构本文对无线点餐系统软件进行了原理和技术上的讨论,详细描述了该系统的设计思路和方法,在此基础上开发了可以实际使用的应用软件。本文包括内容如下:引言:描述了系统开发的背景和意义,简单介绍了系统的主要功能,并与传统的语音信箱进行了比较。需求分析:利用面向对象的分析方法,建立各种环境下的用例模型,描绘出系统的功能、性能和其它需求。系统设计:使用面向对象的设计方法,在需求分析确定的模型基础上,设计出软件的逻辑模型、软件各组成部分间的内在结构及实现方法。这一过程分为概要设计、数据库设计和详细设计三部分。系统实现:论述了系统各功能模块的实现方法。测试报告:对开发完成的软件进行测试分析。结论:总结本软件的特点和不足。55\n苏州科技学院本科生毕业设计(论文)2需求分析本章主要阐述无线点餐系统的总体需求和相关界定,并由此提炼出系统的业务逻辑结构。2.1功能需求无线点餐系统的设计与开发应达到以下的总体目标,即主要功能需求:(1)访客浏览功能:餐厅环境介绍和特色菜的图片采用轮转方式展示,使用户在进入餐厅网站时就可以看到。(2)用户注册功能:当用户准备点菜时需要进行信息的注册,以便在订单完成后发出通知。(3)用户登陆功能:通过正确的用户名和密码进入系统查看菜单并进行点餐。(4)普通用户点餐功能:输入人数、附加信息等选项,进入点菜页面选择要点的菜品,可以看到菜品的名字、图片、价格、描述等信息,通过点击数量两侧的加减按钮选择要点的份数,点击点餐按钮将相应菜品加入到临时订单。(5)查看已点菜临时订单功能:用户点餐过程中可以点击查看详情按钮查看已点菜信息,如果有不需要的菜品可以在此页面中删除,可以继续添加菜品。点菜结束后点击提交订单按钮将点菜信息保存。(6)电子邮件通知功能:用户提交订单后,系统将发送邮件到用户的电子邮件地址,提示用户订单已提交成功。(7)用户订单列表功能:普通用户可以查看自己的所有消费订单,并可将订单打印。未付款订单可以继续加菜。(8)用户信息查看、修改功能:已登陆用户可以查看自己的信息并进行修改。(9)系统管理功能:管理员可以添加禁用用户,并设置用户的角色。(10)Web端管理功能:提供菜单内菜品的添加修改查询,餐桌的添加修改,订单的添加修改查询,付款结账,信息查看,打印菜单。(11)客户端点餐功能:客户端使用Android平板进行点餐,提供55\n苏州科技学院本科生毕业设计(论文)点菜、加菜、减菜、并桌、换桌、结账功能。(12)服务器端和客户端通信功能:服务器端向外部发布WebService,客户端收集用户点菜信息,并通过调用服务器端的WebService将信息传递到服务器端处理,订单数据保存在服务器端。2.2用户群体描述(1)游客指到餐厅网站主页浏览的用户。打开网站首页可以浏览餐厅环境和特色菜肴的展示图片,如果需要点餐可以点击“开始点餐”按钮进行操作。(2)点餐用户如果未注册需要先注册才能点餐,如果已注册需要用注册账户登陆后开始点餐。(3)系统管理人员、服务台负责餐厅菜品、餐桌信息的维护和订单结算。可以根据桌号查到最新消费订单,获得订单的详细信息进行结账。图2.1用例图55\n苏州科技学院本科生毕业设计(论文)2.3业务流程分析2.3.1访客浏览(1)功能定义用户进入餐厅网站主页进行信息浏览,可以查看餐厅环境和特色菜肴。(2)前置条件1)网站中放置要显示的环境和菜肴图片。2)用户从Web端进入餐厅网站首页。(3)业务流程描述用户进入餐厅网站主页进行信息浏览,可以查看餐厅环境和特色菜肴,如果关闭页面则退出,否则继续浏览。图2.2访客浏览流程图2.3.2点菜流程(1)功能定义用户根据需要选择要点的菜,选择需要的分数,点击点菜按钮,相应的菜被添加到临时订单,查看临时订单后确定点菜信息再提交订单,邮件通知用户点菜完成。(2)前置条件1)用户开始点餐前必须已登陆。3)管理员已经将菜品信息添加到菜谱中。(3)业务流程描述55\n苏州科技学院本科生毕业设计(论文)图2.3点菜流程图2.3.3结账流程(1)功能定义用户用餐结束后,结账人员根据桌号和时间找到用户的账单信息,核对无误后结账。(2)前置条件1)用户点餐后提交订单。2)用餐结束。(3)业务流程描述图2.4结账流程图55\n苏州科技学院本科生毕业设计(论文)2.3.4管理用户信息(1)功能定义用户登陆后可以修改自己的注册信息。管理员可以查看用户信息并设置用户角色。(2)前置条件1)用户必须已经注册并登陆。(3)业务流程描述图2.5用户管理流程图2.4数据通讯服务器端和Android客户端通信可以有多种选择方案,比如HTTP请求方式和WebService方式。前者在处理请求操作时比较复杂,通用性差,不同语言之间很难共用;后者实现起来比较简单,而且遵循SOAP协议,各种语言之间的通用性也比较强。WebService的主要目标是跨平台的可互操作性,具有以下优点:(1)跨防火墙的通信;(2)应用程序集成;(3)B2B的集成;(4)软件和数据重用。WebService也叫XMLWebService,WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。XML:(ExtensibleMarkupLanguage)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。55\n苏州科技学院本科生毕业设计(论文)Soap:(SimpleObjectAccessProtocol)简单对象存取协议。是XMLWebService的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。WSDL:(WebServicesDescriptionLanguage)WSDL文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。UDDI(UniversalDescription,Discovery,andIntegration)是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。基于以上特点,本系统采用WebService方式解决服务器端和客户端的通信问题。55\n苏州科技学院本科生毕业设计(论文)3概要设计本章主要阐述无线点餐系统的总体设计和主要功能模块。3.1系统结构设计系统主体结构如图3.1所示。其中:数据库:采用MySQL数据库,存储菜品信息、餐桌信息、用户信息、菜单信息,便于数据的管理和查询。Web容器:采用Tomcat服务器,后台管理和Web端点菜模块放在服务器上,同时向外部发布WebService,Android客户端可以调用相应功能。交换机和无线AP:Web服务器和客户端通信的中间层。点餐设备:Android平板或手机,通过客户端应用添加点菜信息。网络交互:网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。它是人们信息交流使用的一个工具。无线点餐系统通过无线AP将点餐设备和Web服务器组成一个局域网(LAN),在局域网内进行信息的传输。图3.1系统结构图55\n苏州科技学院本科生毕业设计(论文)3.2总体功能模块设计我们的点餐系统有Android接入和Web登录两种接入方式,据此可将整个系统分为两大功能模块群。当用户使用Android接入时,主要有订单管理模块。当用户使用Web方式接入时,普通用户有订单管理模块和用户管理模块,管理员有菜单管理模块、餐桌管理模块、订单管理模块和用户管理模块。系统模块结构如图3.2所示。图3.2功能模块图3.3模块功能概要设计3.3.1菜单管理模块此模块主要实现管理员对菜单的管理功能。管理员登陆后可以使用菜单管理模块的“添加菜品”功能向菜谱中加入新的菜品信息。如果菜品的单价55\n苏州科技学院本科生毕业设计(论文)或图片等有改变,可以使用“更新菜品”功能对菜谱中的信息进行更改。菜品下架后可以使用“删除菜品”功能从菜谱中删除。3.3.2餐桌管理模块此模块主要实现管理员对餐厅餐桌的管理功能。当餐厅需要新增桌子或对已有桌台进行更改时,可以使用此模块功能。3.3.3订单管理模块用户登陆后可以新增订单开始点菜,点菜完成后需要到临时订单页面确认订单信息,确认无误后点击提交订单完成点菜。就餐过程中可以加菜、去菜、换桌、并桌,就餐完成后可以使用系统进行结账。3.3.4用户管理模块此模块完成用户个人信息的修改和管理员对用户权限的更改。用户本人登陆后可以修改注册信息和密码,管理员可以修改其他用户的角色和权限。3.3.5WebService接口WebService接口提供以下功能:(1)客户端数据更新服务。当服务器端的菜品和餐桌信息变更时,客户端可以通过调用服务器端的数据更新接口获得最新的数据,从而保持了客户端和服务器的数据一致性。(2)用户点餐服务。订单数据在服务器端维护,用户点餐时调用新增订单及点菜、加菜、减菜、换桌、并桌等接口完成点餐的操作。结账时提供结账的WebService接口。55\n苏州科技学院本科生毕业设计(论文)4数据库设计本章主要阐述无线点餐系统的数据库需求、设计和表的实现。4.1数据库的需求分析在设计数据库时,不同主题的信息应存储在不同的表中,并遵循下列规则:同一信息只保存一次;防止删除有用信息。只有在统一信息只保存一次的前提下,才能减少数据冗余性和出错的可能性。为了防止删除有用信息,最好的解决方法就是把不同主题的信息放在不同的数据表中。无线点餐系统需要记录菜谱信息,餐桌信息,订单信息,用户信息。对于订单信息来说,一个订单会点了很多菜,一个菜会在多个订单中被点,属于多对多的关系,在数据表的设计中容易出现数据的冗余。系统中采取了添加一个中间表的方式,将订单信息和菜品信息分别完整的记录在自己相应的表中,中间表则记录订单和菜品的对应关系,减少了数据的冗余。4.2数据库概念设计在概念设计阶段中,我们从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式,然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制。(1)实体和属性的定义用户(用户ID,用户名,用户密码,用户邮箱,用户电话,用户状态,用户类型);餐桌(餐桌ID,餐桌编号,最佳人数,餐桌是否忙,餐桌图片,最大人数,预定时间,是否删除);菜品(菜品ID,名称,图片,价格,55\n苏州科技学院本科生毕业设计(论文)折扣,类型,用时,是否删除,描述,附加信息);订单(订单ID,总价,总人数,总菜数,下单时间,预定时间,订单状态,附加信息,描述,用户ID,餐桌ID);订单_菜品(订单菜品ID,描述,点菜份数,订单ID,菜品ID)(2)ER关系图系统的ER关系如图4.1所示。图4.1ER关系图解释如下:1)一个餐桌上在不同时间可以有多条订单信息,而一个订单只能有对应着一个餐桌。(换桌或并桌时把订单对应的餐桌ID改掉)2)一条订单信息对应一个用户,一个用户可以点多个订单。3)一个订单对应多个订单_菜品记录,一个订单_菜品记录对应一个订单。4)一个订单_菜品记录对应一个菜品,一个菜品对应多个订单_菜品。55\n苏州科技学院本科生毕业设计(论文)4.3数据库逻辑设计由于概念设计的结果是ER图,DBMS一般采用关系型(我们采用的MySQL就是关系型的DBMS),因此数据库的逻辑设计过程就是把ER图转化为关系模式的过程。由于关系模型所具有的优点,逻辑设计可充分运用关系数据库规范化理论,是设计过程形式化的进行。数据库关系模式如图4.2所示。图4.2数据库关系模式图4.4数据库的实现MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。MySQL是一个关系数据库管理系统,55\n苏州科技学院本科生毕业设计(论文)关系数据库把数据存放在分立的表格中,这比把所有数据存放在一个大仓库中要好得多,这样做将增加你的速度和灵活性。MySQL是开源的开源意味着任何人都可以使用和修改该软件,任何人都可以从Internet上下载和使用MySQL而不需要支付任何费用。MySQL数据库服务器是一个客户/服务器系统,它由多线程SQL服务器组成,支持不同的后端、多个不同的客户程序和库、管理工具和广泛的应用程序接口(APIs)。各数据表的物理实现如表4.1、表4.2、表4.3、表4.4、表4.5所示。表4.1用户表表名用户表users说明记录用户的个人基本信息编号字段名数据类型是否为空是否为主键是否为外键说明1U_idINTEGERNYN用户ID,自动增长2U_nameVARCHAR(150)NNN用户名3U_passwordVARCHAR(150)NNN密码4U_emailVARCHAR(100)YNN用户邮箱5U_telVARCHAR(45)YYN电话号码6U_statusVARCHAR(45)YNN用户状态,默认”active”7U_roleVARCHAR(45)YNN用户角色,分为”user”和”admin”。表4.2菜品表表名菜品表food说明记录菜品的相关信息,为各功能模块服务编号字段名数据类型是否为空是否为主键是否为外键说明1F_idINTEGERNYN菜品编号2F_nameVARCHAR(200)YNN菜品名称3F_picVARCHAR(300)YNN菜品图片地址4F_priceDOUBLEYNN菜品单价5F_discountDOUBLEYNN菜品折扣6F_typeVARCHAR(100)NNN菜品类型7F_timetouseDOUBLEYNN做菜所需时间8F_statusVARCHAR(100)YNN菜品状态,是否删除9F_addonVARCHAR(300)YNN附加信息10F_descriptVARCHAR(800)YNN描述信息表4.3餐桌表表名餐桌表ttable说明记录餐桌的相关信息,为各功能模块服务编号字段名数据类型是否为空是否为主键是否为外键说明1T_idINTEGERNYN餐桌编号2T_numINTEGERYNN餐桌号码3T_sizeINTEGERYNN餐桌最佳人数55\n苏州科技学院本科生毕业设计(论文)4T_flagINTEGERYNN是否忙的标记5T_picVARCHAR(300)YNN餐桌图片地址6T_maxsizeINTEGERYNN餐桌最大人数7T_pretimeDATETIMEYNN预定时间8T_statusTINYINT(1)YNN餐桌状态,是否删除表4.4订单表表名订单表oorder说明记录订单的相关信息,为各功能模块服务编号字段名数据类型是否为空是否为主键是否为外键说明1O_idINTEGERNYN订单编号2O_totalpriceDOUBLEYNN订单总价3O_totalpeopleINTEGERYNN总人数4F_sizeINTEGERYNN总菜数5O_currenttimeDATETIMEYNN订单时间6O_pretimeDATETIMEYNN预定时间7O_statusVARCHAR(100)YNN订单状态,是否删除8O_addonVARCHAR(300)YNN附加信息9O_descriptVARCHAR(800)YNN描述信息10U_idINTEGERYNY用户ID11T_idINTEGERYNY餐桌ID表4.5订单_菜品表表名通话留言表calldetail说明记录呼叫的相关信息,为各功能模块服务编号字段名数据类型是否为空是否为主键是否为外键说明1Of_idINTEGERNY订单_菜品ID2Of_statusVARCHAR(100)YN菜品数量3Of_addonVARCHAR(300)YN订单_菜品附加信息4O_idDATETIMEYN订单ID5F_idDATETIMEYN菜品ID55\n苏州科技学院本科生毕业设计(论文)5详细设计本章主要阐述无线点餐系统各功能模块的实现过程。无线点餐主要由菜品管理模块,餐桌管理模块,订单管理模块,用户管理模块构成。模块中均采用了分层设计,由Action层取得用户数据,Service层做业务逻辑的处理,DAO层负责和数据库的交互。Spring贯穿在三层中,负责Hibernate的配置和bean的依赖注入,方便程序的协同工作。菜品管理分层结构的分层如下:图5.1分层结构图图5.2ManageFood类图55\n苏州科技学院本科生毕业设计(论文)图5.3FoodManageService类图5.1菜单管理模块设计5.1.1整体设计菜单管理分为添加、更新、删除操作。添加菜品信息由管理员在添加页面上输入。在数据库菜品表中有一列记录菜品当前状态,新添加进去的记录为“active”状态,表示当前菜单中菜品可用。更新操作首先从数据库取得原来的数据显示到页面上,管理员对相应信息做完修改后点击确认按钮,通过业务层之间的调用将数据库中的信息更新。删除分为将记录从数据库清除和将记录标记为不可用两种方式,前一种称之为“硬删除”,后一种称之为“软删除”,本系统中采取了“软删除”的方式,即将要删除的菜品信息在数据库中标记为不可用。在其他显示、查询等操作中,对于标记为不可用状态的数据不做操作。5.1.2管理员输入信息的传递55\n苏州科技学院本科生毕业设计(论文)数据信息从前台由管理员录入,在Struts的action中分别有相应的字段和用户输入的信息对应,在action中获得用户输入的信息后调用业务逻辑Service层的添加菜品方法,将数据传到Service层组成Food实体,然后交由DAO层保存到数据库。数据流图如下:图5.4信息输入数据流图5.2订单管理模块设计5.2.1整体设计用户开始点餐时首先输入人数等信息创建一个新的订单,状态为“new”,点菜过程中订单内的点菜数据增加,状态认为“new”,点菜完成时用户点击提交按钮,订单状态变为“submitted”,用户付款后订单状态变为“payed”。参见图5.5“订单状态”状态迁移图。图5.5订单状态迁移图55\n苏州科技学院本科生毕业设计(论文)5.2.2用户点餐功能用户首先在新增订单页面输入就餐人数等信息,点击提交按钮后新的订单创建,页面跳转到点菜页面,用户浏览菜单信息,选择要点的菜,使用数字输入框左、右两边的加减符号改变要点的份数,点击“点餐”按钮将选择的菜品加入订单。所有要点的菜全部完成时,可以进入查看详情页面查看当前已点了哪些菜,并可以进行加菜、减菜操作。信息确认无误后点击“提交订单”按钮将点菜信息保存到数据库。同时,系统会发送一封邮件到点餐者的注册邮箱。整个点餐过程完成。图5.6用户点餐时序图5.2.3邮件通知功能当用户提交订单后系统根据点餐人的注册信息,向点餐人的邮箱内发送一封点餐成功的邮件。可采用JavaMail的相关功能,使用pop3或SMTP协议发送邮件,要求发送者邮箱即系统默认用来发送邮件的邮箱必须支持Pop3或者SMTP协议。5.2.4换桌、并桌功能顾客在就餐过程中如有需要换桌或并桌可以由以下方式实现:55\n苏州科技学院本科生毕业设计(论文)换桌:将当前订单号和目的桌号由用户输入,后台根据输入的数据将当前订单的桌号改为目的桌号。并桌:将用户要求的两个订单桌号改为同一个。5.2.4结账功能管理员查询到当前要结账的订单,确认订单信息及应付款后点击付款按钮,相应订单信息改为已付款。5.3用户管理模块设计5.3.1整体设计用户管理模块的主要功能有用户注册,用户登陆,密码修改,个人信息修改,用户角色管理,权限管理。5.3.2用户注册功能用户点菜时需要先注册为系统的用户,点击注册链接转到注册界面,填写个人信息后点击注册按钮,确认信息无误后注册成功,转到用户登陆界面。5.3.3角色管理功能用户角色分为管理员和普通用户两种。管理员可以在用户管理界面设置用户的角色。角色切换后相应的权限也做改变。5.3.3个人信息修改功能已登陆用户可以修改自己注册的个人信息,系统分配的用户ID和用户角色不可以更改,应由管理员进行管理。5.4WebService接口设计订单管理模块WebService提供以下接口:(1)添加订单接口:publicOorderaddOrder(intpeopleNumber,inttid,Stringoaddon,Stringodescript,intuid);55\n苏州科技学院本科生毕业设计(论文)peopleNumber:就餐人数;tid:餐桌ID;oaddon:订单附加信息;odescript订单描述;uid:用户ID;返回Oorder实体。(2)点菜功能接口:publicbooleanorderAddFood(intoid,MaptempMap);oid:订单ID;tempMap:菜品ID和需要份数的键值对;返回boolean,标记点菜是否成功。(3)减菜功能接口:publicbooleandeleteFood(intorderID,intfoodID);orderID:订单ID;foodID:要删除的菜品ID;返回boolean标记删除是否成功。(4)换桌功能接口:publicbooleanchangeTable(intorderID,intcurrentTableID,intdesTableID);orderID:订单ID;currentTableID:当前桌编号;desTableID:要换到的桌号;返回boolean标记换桌是否成功。(5)更改就餐人数接口:publicbooleanchangePeopleNumber(intorderID,intpeopleNumber);orderID:订单ID;peopleNumber:就餐人数;返回boolean标记更改人数是否成功。(6)计算订单总价接口:publicdoublegetTotalPrice(intorderID);orderID:订单ID;返回订单总价;(7)付款功能接口:publicbooleanpayOrder(intoid);oid:订单ID;返回boolean标记付款是否成功。服务器端向外部发布WebService时,在web.xml中配置AxisServlet的拦截器,处理WebService请求。Axis2和Spring结合使用,将上述接口的信息配置在service.xml文件中,由Spring管理WebService中的bean实例,将接口提供的功能发布到外部。55\n苏州科技学院本科生毕业设计(论文)6系统实现6.1开发环境及相关技术(1)EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse平台的目的,是提供多种软件开发工具的整合机制,这些工具会成为Eclipse外挂程序,平台必须用外挂程序加以扩充才有用处。Eclipse设计美妙之处,在于所有东西都是外挂,除了底层的核心以外。这种外挂设计让Eclipse具备强大扩充性,但更重要的是,此平台提供一个定义明确的机制,让各种外挂程序共通合作(透过延伸点extensionpoints)与贡献(contributions)),因此新功能可以轻易且无缝地加入平台。(2)TomcatTomcat是一个JSP/Servlet容器,它是在Sun公司的JSWDK基础上发展起来的一个JSP和Servlet规范的标准实现,使用Tomcat可以体验JSP和Servlet的最新规范。Tomcat具有开源免费,小巧灵活等有点,适合中小型的应用。(3)MySQLMySQL速度快,开源免费,支持多种操作系统,适合一般中小应用。在后台程序中我们使用MySQL自带的CAPI的方式对其进行操作,在Web查询模块中我们使用JDBC接口。(4)StrutsStruts最早是作为ApacheJakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServerPages、Servlet、标签库以及面向对象的技术水准。Struts是55\n苏州科技学院本科生毕业设计(论文)建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;(5)SpringSpring是一个开源框架,它由RodJohnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。(6)HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。(7)Axis2ApacheAxis2项目是一个基于Java语言的Webservices系统服务和客户端的实现。为了从ApacheAxis1.0中获取教训,ApacheAxis2提供了一个完整的对象模型和模块化体系结构,这样可以很容易的添加功能以及支持一个新的与Webservices相关的说明和建议。Axis2可以让用户很容易的执行以下任务:发送SOAP消息接收和处理SOAP消息从一个普通的Java类建立Webservice用WSDL来建立实现服务和客户端的实现类很容易的从一个服务来获取WSDL发送和接收带有附件的SOAP消息建立或者使用基于REST的Webservice55\n苏州科技学院本科生毕业设计(论文)6.2功能模块的实现6.2.1菜单管理功能模块的实现业务逻辑相关操作放在Service中处理,数据从Action层中传入。添加菜品方法如下:/**@seecom.wirelessorder.Service.FoodManageService#addFood(java.lang.String,java.lang.String,double,int,int)*/@OverridepublicbooleanaddFood(Stringf_name,Stringf_pic,doublef_price,doublefdiscount,doubletimeToUse,Stringf_type,Stringfdescript,Stringfaddon){Foodfood=newFood();food.setFname(f_name);food.setFpic(f_pic);food.setFprice(f_price);food.setFtimeToUse(timeToUse);food.setFtype(f_type);food.setFdescript(fdescript);food.setFaddOn(faddon);food.setFdiscount(fdiscount);food.setFstatus(ONSALE);foodDao.addFood(food);logger.info("InFoodManageServiceImpl--->AddFoodsuccessfull");returntrue;}该方法接收Action层传入的菜品信息,分别为Food实体设置他的属性,然后调用DAO层的保存实体方法将信息存入数据库。分页获得菜单信息方法如下:@OverridepublicPageResultSetlistFood(StringfoodType,intpageSize,intpage){if(foodType==null||"0".equals(foodType)){hql="fromFoodfwheref.fstatus='onsale'";}else{hql="fromFoodfwheref.fstatus='onsale'andf.ftype='"+foodType+"'";}inttotalRow=foodDao.queryRowCount(hql);//计算总记录个数PageInfopageinfo=newPageInfo(totalRow,pageSize,page);//获取该页的记录Listlist=foodDao.listFood(hql,pageinfo.getBeginIndex(),pageinfo.getPageSize());PageResultSetpageResultSet=newPageResultSet();pageResultSet.setList(list);55\n苏州科技学院本科生毕业设计(论文)pageResultSet.setPageInfo(pageinfo);logger.info("InFoodManageServiceImpl--->ListFoodsuccessfull");returnpageResultSet;}该方法接受要显示的菜品状态、分页大小和要显示的页数,返回数据的信息和分页信息。6.3点菜功能模块的实现6.3.1添加菜品的实现@SuppressWarnings({"rawtypes"})@OverridepublicbooleanorderAddFood(intoid,MaptempMap){Stringhql="fromOorderowhereo.oid='"+oid+"'";oorder=orderDao.getOrderByString(hql);if(oorder!=null){//Iterator>iterator=tempMap.entrySet().iterator();for(Iterator>ite=tempMap.entrySet().iterator();ite.hasNext();){Map.Entryentry=(Map.Entry)ite.next();intfoodId=(Integer)entry.getKey();StringaddCount=entry.getValue().toString();OrderFoodof=newOrderFood();Foodoffood=newFood();offood=foodDaoInOrder.getFoodByID(foodId);of.setOfstatus("ordered");of.setOfaddOn(addCount);of.setOforder(oorder);of.setOffood(offood);orderFoodManageDao.saveOrderFood(of);}oorder.setOstatus("submitted");orderDao.updateOrder(oorder);logger.info("InOrderManageServiceImpl--->OrderAddFoodsuccessfull");returntrue;}else{logger.info("InOrderManageServiceImpl--->OrderAddFoodfailed");returnfalse;}}该方法接受订单ID和当前订单对应的菜品的ID和数量组成的Map键值对,遍历Map55\n苏州科技学院本科生毕业设计(论文)获得每一个菜品ID和数量,将这些信息从插入到订单_菜品中间表中,以完成点餐信息的记录。6.3.2邮件通知的实现代码段如下:Datedt=newDate();MailSenderInfomailInfo=newMailSenderInfo();mailInfo.setMailServerHost("smtp.qq.com");mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUserName("466741313@qq.com");mailInfo.setPassword("xxxxxx");//您的邮箱密码mailInfo.setFromAddress("466741313@qq.com");mailInfo.setToAddress("490290793@qq.com");mailInfo.setSubject("订单提交成功");mailInfo.setContent("您点菜的订单已于"+dt.toLocaleString()+"创建成功,感谢您的使用");//这个类主要来发送邮件SimpleMailSendersms=newSimpleMailSender();//sms.sendTextMail(mailInfo);//发送文体格式try{sms.sendHtmlMail(mailInfo);//发送html格式}catch(ExceptionmailExc){}这段代码设置发送邮件必须要的一些属性,通过SMTP服务器向点餐用户的邮箱发送一封点餐成功的邮件。6.4主要界面(1)用户浏览页面:用户进入餐厅首页可以浏览餐厅环境和特色菜相关信息,采用图片轮转方式显示。55\n苏州科技学院本科生毕业设计(论文)图6.1访客浏览页面(2)个人信息管理页:在此页面,用户可以完成个人信息修改。其界面如图6.2所示。图6.2个人管理页面(3)添加菜品页:管理员可在此页面添加新的菜品信息。其界面如图6.3所示。55\n苏州科技学院本科生毕业设计(论文)图6.3添加菜品页面(4)菜单管理页:列出了系统中已有菜品情况,可以点击修改菜品和删除,可按分类显示。其界面如图6.4所示。图6.4菜单管理页面55\n苏州科技学院本科生毕业设计(论文)(5)修改菜品页:在此页面,管理员可以更改已有菜品的。其界面如图6.5所示。图6.5修改菜品页面(6)新增订单页:在此页面,用户可以填写就餐人数,描述和附加信息。其界面如图6.6所示。图6.6新增订单页面55\n苏州科技学院本科生毕业设计(论文)(7)点餐列表页:在此页面,用户可以选择要点的菜及份数。点餐完成可以查看详情并确认。其界面如图6.7所示。图6.7点餐列表页面(8)查看订单页:用户可以在此页面查看已点菜的信息,可以继续加菜,也可以删除不要的菜。确认无误后提交订单。其界面如图6.8所示。55\n苏州科技学院本科生毕业设计(论文)图6.8查看订单页面(9)订单列表页:管理员可以在此页面查看所有订单信息,普通用户可以查看自己的所有订单。其界面如图6.9所示。图6.9查看订单页面55\n苏州科技学院本科生毕业设计(论文)6.5数据库操作在Web接入方式的数据库操作上,为了更方便的实现对数据库并发访问操作的管理,我们使用Hibernate框架进行数据库的操作。首先配置一个HibernateJDBC的配置文件,如下所示:jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/wirelessorder?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=123456#SQLdialecthibernate.dialect=org.hibernate.dialect.MySQLDialect#JDBCconnectionpoolhibernate.connection.pool_size=1#EnableHibernate'sautomaticsessioncontextmanagementhibernate.current_session_context_class=thread#Disablethesecond-levelcachehibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider#EchoallexecutedSQLtostdouthibernate.show_sql=true#Dropandre-createthedatabaseschemaonstartuphibernate.hbm2ddl.auto=update在实际操作中将Hibernate整合到Spring中,所以Hibernate的数据源(Datasource)及SessionFactory都写在ApplicationContext.xml文件中。由Spring启动时将这些信息加载到系统中。其中ApplicationContext.xml中的数据源配置如下:55\n苏州科技学院本科生毕业设计(论文)${hibernate.dialect}${hibernate.show_sql}${hibernate.hbm2ddl.auto}com/wirelessorder/model/users.hbm.xmlcom/wirelessorder/model/ttable.hbm.xmlcom/wirelessorder/model/food.hbm.xmlcom/wirelessorder/model/oorder.hbm.xmlcom/wirelessorder/model/orderfood.hbm.xml在DAO层和数据库交互时有两种方式,第一种是使用Hibernate的Template,如下所示:/**@seecom.wirelessorder.Dao.OrderFoodManageDao#saveOrderFood(com.wirelessorder.model.OrderFood)*/@OverridepublicbooleansaveOrderFood(OrderFoodof){try{getHibernateTemplate().save(of);logger.info("InOrderFoodManageDaoImpl--Addafoodsucceed");returntrue;}catch(Exceptione){logger.info("InOrderFoodManageDaoImpl--Addafoodfailed");returnfalse;}}第二种使用Query方法和事物,如下所示:@SuppressWarnings("unchecked")@OverridepublicListorderListFood(Stringhql){Sessionsession=getHibernateTemplate().getSessionFactory().openSession();Transactiontransaction=null;try{transaction=session.beginTransaction();Queryquery=session.createQuery(hql);55\n苏州科技学院本科生毕业设计(论文)Listlist=query.list();transaction.commit();returnlist;}catch(Exceptione){if(null!=transaction){transaction.rollback();e.printStackTrace();}returnnull;}}55\n苏州科技学院本科生毕业设计(论文)7测试报告7.1测试方案计划选取的测试方法:功能测试、强度测试、恢复测试、安全测试、安装测试。选取测试用例的原则:软件测试是为了验证程序是否满足规定的需求,或者为了识别出程序的预期结果与真正结果有无差别,而执行和评价程序或程序组成部分的过程。测试并不是为了证明程序是正确的,而是系统地暴露程序中可能存在的各种类型的错误。因此,测试的根本目的是发现错误,并纠正错误,对程序的正确性和可靠性进行分析,以便最终提交高质量的、符合用户需要的软件。7.2测试项目(1)安装测试:目的是核实软件在部署后可否立即正常运行。(2)用户浏览功能测试:验证用户进入主页后是否可以进行正常的信息浏览。(3)用户注册功能测试:验证用户输入正确信息后可否注册成功,输入错误信息的处理。(4)用户登陆功能测试:验证用户输入正确的用户名和密码是否可以登陆。(5)用户信息修改功能测试:验证用户信息修改是否成功。(6)用户点餐功能测试:验证用户登陆后点餐信息是否正确,订单中是否有点餐信息。(7)管理员菜品添加功能测试:管理员输入的菜品信息是否正确添加,上传图片的处理是否正确。(8)管理员菜品更新功能测试:更新菜品功能是否实现。(9)管理员餐桌添加功能测试:管理员输入的餐桌信息是否正确添加,上传图片的处理是否正确。(10)管理员餐桌更新功能测试:更新餐桌功能是否实现。(11)管理员订单管理功能测试:55\n苏州科技学院本科生毕业设计(论文)查看订单、加菜、减菜、结账功能是否正确实现。(12)用户管理功能测试:更改用户角色、权限管理功能是否正确实现。7.3主要测试用例测试用例1测试用例的名称:安装测试。测试用例的目的:目的是核实软件在安装后可否立即正常运行。测试方法:将系统部署到一台新的机器上,看其是否能正常运行。测试用例的输入:系统发布出来的war包和数据库数据。期待的输出:该软件能够正常运行。实际的输出:该软件能够正常运行。测试用例2测试用例的名称:用户浏览功能测试。测试用例的目的:目的是测试用户在进入系统主页后是否可以进行正常的信息浏览。测试方法:打开浏览器,进入系统的主页,浏览餐厅环境页面和特色菜肴页面。测试用例的输入:无期待的输出:能够正常浏览餐厅信息。实际的输出:能够正常浏览餐厅信息。测试用例3测试用例的名称:用户注册功能测试。测试用例的目的:目的是测试用户注册时是否可以注册成功。测试方法:进入用户注册页面,输入正确的注册信息,点击提交按钮。测试用例的输入:用户的注册信息。期待的输出:用户注册成功。实际的输出:用户注册成功。测试用例455\n苏州科技学院本科生毕业设计(论文)测试用例的名称:用户登陆功能测试。测试用例的目的:目的是测试用户可否登陆,登陆后是否跳转到正确的页面。测试方法:进入用户登陆页面,输入正确的登陆信息,点击登陆按钮。测试用例的输入:用户的登陆信息。期待的输出:用户登陆成功。如果用户的角色是普通用户则跳转到普通用户操作界面;如果用户的角色是管理员,则跳到管理员操作页面。实际的输出:用户登陆成功。如果用户的角色是普通用户则跳转到普通用户操作界面;如果用户的角色是管理员,则跳到管理员操作页面。测试用例5测试用例的名称:用户信息修改功能测试。测试用例的目的:目的是测试用户修改信息时是否修改成功。测试方法:普通用户登陆后点击修改个人信息链接,输入相应的信息后点击提交按钮。测试用例的输入:用户的需要修改的信息。期待的输出:用户修改信息成功。实际的输出:用户修改信息成功。测试用例6测试用例的名称:用户点餐功能测试。测试用例的目的:目的是测试用户点餐是否可以成功。测试方法:用户登陆后点击新增订单链接,填写人数、描述等信息后开始点菜,点菜过程中可以查看已点菜信息,确认无误后点击提交订单按钮,点餐完成。测试用例的输入:人数、附加信息、点菜信息。。期待的输出:用户点餐成功,生成用户订单。实际的输出:用户点餐成功,生成用户订单。测试用例7测试用例的名称:管理员菜品添加功能测试。测试用例的目的:目的是测试管理员向菜单中添加新的菜品时是否成功。测试方法:55\n苏州科技学院本科生毕业设计(论文)管理员进入添加菜品页面,输入菜品相关信息,选择菜品对应的图片,点击提交按钮。测试用例的输入:菜品相关信息及对应的图片。期待的输出:添加菜品成功,菜单中有其相应的信息。实际的输出:添加菜品成功,菜单中有其相应的信息。测试用例8测试用例的名称:管理员菜品更新功能测试。测试用例的目的:目的是测试管理员更新菜品信息是否正确实现。测试方法:管理员选择要更新的菜品,点击更新按钮,页面上会显示对应菜品的信息,管理员对信息做了更改后点击提交按钮。测试用例的输入:菜品的更新信息。期待的输出:更新菜品信息成功。实际的输出:更新菜品信息成功。测试用例9测试用例的名称:用户管理功能测试。测试用例的目的:目的是测试管理员对用户的管理功能正确实现。测试方法:管理员进入用户管理界面,对相应的用户可以进行“更改角色”和“禁用”操作。测试用例的输入:无期待的输出:点击更改角色则将原来的普通用户角色变为管理员,将原来管理员的角色变为普通用户;点击禁用则用户的帐号被冻结,不能登陆系统。实际的输出:用户管理功能正确实现。7.4测试进度功能性测试在编码过程中随程序的进展同步测试。安装测试在程序完成之后进行测试。在程序设计编码完成之后,对该系统进行集成测试。集成测试是根据设计中各功能模块的说明和制定的集成测试计划,将经过单元测试的模块逐步进行组装和测试。55\n苏州科技学院本科生毕业设计(论文)7.5测试方法功能测试:以软件需求说明书规定的系统功能为依据,设计各种测试用例,并用这些测试用例检查各个功能的实现情况。强度测试:检查程序系统对强负荷的承受能力。针对异常情况设计测试用例,以强迫系统在异常的资源配置下运行。例如,针对下列情况来设计测试用例:产生高密度的中断,可能导致操作系统或磁盘数据剧烈抖动,大量、高频率的数据输入,需要最大的存储空间等。恢复测试:主要检查系统的容错能力,即检查当出现硬件或软件错误时,系统在指定的时间间隔内恢复运行而不丢失或损害数据和控制的能力。安全测试:证实系统对非法入侵的防范能力,即检查系统的安全机制是否会被非法用户破坏。安装测试:安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下(例如,进行首次安装、升级、完整的或自定义的安装)都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。7.6测试结果分析7.6.1测试的局限性该测试用例能够检测到系统的所有功能性错误,按键错误;但对系统的某些小的逻辑错误可能检测不到位。7.6.2评价测试结果的准则无线点餐系统的所有功能都能够实现,系统性能满足使用需要。55\n苏州科技学院本科生毕业设计(论文)总结本文首先描述了无线点餐系统的开发背景、解决的主要问题和意义,然后,利用面向对象的分析方法进行了系统的需求分析,建立了各种坏境下的用例模型,并在此基础上对系统进行了全面设计,包括系统逻辑结构设计、各子系统设计、业务流程设计、数据库设计、界面设计等,并给出系统的测试报告。经过几个月的努力,终于完成了系统的开发和论文的写作。无线点餐系统是一个比较实用的软件系统,服务器端实现了餐饮行业点餐的各种功能,通过和客户端的无线通信,使点餐可以在移动设备上完成,使用终端触屏点菜还可以让顾客看到更多的有关菜的信息,同时友好的用户界面加上触摸技术可让顾客享受点餐的乐趣,极大提升餐厅档次和企业形象。但是,系统在实现过程中还存在一些不足,如服务器端页面的美观性,和其他系统的集成等方面,用户体验也有待于进一步提高。无线点餐系统在解决这些不足后,可以向着更加智能化的方向发展,全方位的解决点餐过程中的问题,从而提高点餐效率,带给顾客良好的体验。在人们生活节奏越来越快的今天,相信无线点餐系统一定会有广阔的发展前途。55\n苏州科技学院本科生毕业设计(论文)致谢通过这半个学期的毕业设计,我得到过很多的帮助。在此,我衷心感谢对我耐心指导的陆卫忠老师。陆卫忠老师在我大学的最后学习阶段——毕业设计阶段给自己的指导,从最初的定题,到资料收集,到写作、修改,到论文定稿,他都给了我耐心的指导和无私的帮助。为了指导我们的毕业论文,他放弃了自己的休息时间,他的这种无私奉献的敬业精神令人钦佩,在此我向她们表示我诚挚的谢意。同时,感谢所有任课老师在这四年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才。同时,我也要感谢我们班的同学,特别是伍思远,丁红燕,唐渝娟同学,通过我们精心的合作才使得该课题如期的完成。当然,还有那些给过我帮助的其他同学,我非常感谢他们的帮助,我从他们身上也学到了很多知识。最后,再次向百忙之中评阅本论文的教师以及答辩组的各位教师致以最诚挚的感谢。55\n苏州科技学院本科生毕业设计(论文)参考文献[1]谭浩强.Java语言程序设计(第三版)[M].北京:清华大学出版社,2008.[2]张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003[3]王珊、萨师煊.数据库系统概论(第四版)[M].北京:高等教育出版社,2006.[4]张孝祥.WebService专题[ED]http://www.it315.org[5](美)沃尔斯,(美)布雷登巴赫.SpringinAction(第二版)[M].北京:人民邮电出版社,2008.[6]李飞,最新实用网络技术教程[M].西安:西安电子科技大学出版社.69~70.[7]史斌星,史佳.Java基础编程贯通教程[M].北京:清华大学出版社,2003.[8]WebService学习笔记[ED]http://blog.csdn.net/qjyong/article/details/2148558[9]WebService标准[ED]http://www.1861web.com/dis_news-1788.html[10]WSDL详解[ED]http://wenku.baidu.com/view/0ecf23593b3567ec102d8a8e.html?from=related&hasrec=155\n苏州科技学院本科生毕业设计(论文)附录A译文J2EE开发框架Java2企业版为中间件领域思想的统一上发挥了很大的作用。比如,J2EE为分布式事务管理、目录服务和消息服务提供了一套标准的编程接口。J2EE的基础——Java2标准版(J2SE),成功地为Java提供了一套访问关系数据库的标准。但是,就像本文中“J2EE缺乏对编程的支持”提到的一样,J2EE这个平台没有能够提供一个令人满意的应用程序编程模型。Sun公司和一些大的应用服务器供应商都想用开发工具来降低J2EE开发的复杂性,但是这些工具没有其他的JAVA开发工具优秀,后者有先进的重构工具,和.NET平台相比,J2EE的工具支持显得很逊色。很多J2EE开发工具自动产生的代码像这些工具本身同样复杂。在开源社区很多小型J2EE开发者选择了另外一种开发方式——一些可以降低J2EE开发难度的开发框架,较为流行的比如:Struts,Hibernate,和SpringFramework,他们当今很多J2EE项目种扮演着重要角色。为什么要采用框架?框架是一由一些类组成,正式这些类为应用程序提供了一个可重用的设计――或者我们经常提到的——应用程序种的一层。应用程序代码访问类库从而执行任务,而框架是调用应用程序代码,从而管理程序的流程。这就是经常说道的好莱坞原则:“不要试图联系我们,我们到时候自会通知你。”开发者写的程序在运行时由框架调用。设计一个在各种未知背景下都可以使用的框架是很有挑战性的。框架很适合在复杂的J2EE开发中使用,它可以为开发者提供一个简单易用的模型。采用一个经过良好设计的开源框架有很多好处:1、在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。这一点很重要。2、经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。55\n苏州科技学院本科生毕业设计(论文)3、一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。4、采用成功的框架的代码比自己的代码容易测试5、框架只有提供了一些值得使用的功能才会变得流行。J2EE工程只有真正需要框架的时候才会用它,而自己的框架并不是这样,后者是处于统治地位的。J2EE本身也提供了一些框架。比如,EnterpriseJava-Beans(EJB)container或者Servletengine,二者都运用了“采用了好莱坞原则”这个思想,并采用运行时调用来管理对象。像Struts这些开源web应用框架正式建立在这两个框架的基础上的,本文讨论的重点也是像Struts这样建立在J2EE上的框架,他们为开发者提供了更为简单的模型,和其他的一些好处。 开源框架的出现很多大型的J2EE项目都用自己的内部框架来隐藏平台的复杂性,直到最近人们才逐渐发现一些在很多项目中都存在的共有的难题,这些难题都可以由一个较为统一的解决方案来解决。而有的框架正好可以充当这些问题的解决方案。现在有种很明显的趋势:与从前的内部框架相比,这些框架将成为这些难题的更加“标准化”的解决方案。J2EE平台的日益成熟是这些框架流行的一个原因。开发者知道有些地方是J2EE的标准API无能为力的,倚他们的经验来看,要弥补这个缺陷是很困难的。于此同时,一些优秀的开源框架可供使用,它们提供了极为丰富的技术文档,在它们背后还有一个专业的团队做支持,并且一切都是免费的。Struts在web应用程序产生的那时就有了开源框架。在1999-2000年,开发者们意识到JSP“Model1”55\n苏州科技学院本科生毕业设计(论文)的缺陷,JSP中充斥着请求处理代码和静态数据模板,这意味着你不得不把业务逻辑和复杂的HTML以及其他的标签混到一起。那个时候还没有标准的框架和J2EE的标准支持,要解决这个问题开发者就得自己实现前端控制器,这样可以把业务逻辑分离到java类中,从而可以减轻对JSP的维护难度。前端控制器模式经常运用在MVC架构中,MVC模式在OO语言的GUI开发中经常使用(这个名字总是让人误解,WEBMVC中的视图是从模型中“拉”数据;而在经典MVC中,模型把事件“推向”视图)。最初的前端控制器实现质量参差不齐。2001~2002年间,Apache开源组织发布的Struts改变了这个状况,虽然它并非一个完美的框架,但已经足够使其成为该领域事实上的标准。Struts向人们展示了开源框架的一些优点,比如,新手可以很容易地熟悉它的结构。2002年末,它成立很多J2EE项目很自然的选择,每一个认真的J2EE开发者都会对它很熟悉。Struts几乎用才每一个J2EE项目中,这使得它成为J2EE架构的一个重要组成部分。甚至很多保守的组织也将其作为软件底层的一部分,并同意接受Apache的开源协议条款。Hibernate下一个倒下的多骨诺米牌就是持久化。J2EE提供了两个持久化的手段:JDBC,它是J2SE中访问关系数据库系统的标准API;另一个是实体Beans,它是EJB中专门模型化持久化实体的组件。JDBC以一种错误的编程模型来强制开发者用Java代码来处理关系思想。而实体beans,先不说Sun和其他主要的J2EE供应商的吹嘘,给人很笨重的感觉:起初这门技术的应用范围很窄,连持久对象间的关系都不能处理。它使得应用程序难于测试,并且使用了一个很糟糕的查询语言。直到2003年,即使EJB2.0和2.0做了很多改进,开发者们却很少用它。 早期的尝试持久化问题的解决方案是由关系-对象映射(ORM)来解决的,它可以透明地持久化普通java对象(POJO)。该思想在注释中有解释。虽然这种方案并不是专属java的。但相对与其他的社区而言比如.NET,ORM在java社区更加流行(.NET开发者总是对之抱有怀疑的态度)。55\n苏州科技学院本科生毕业设计(论文)早在1990年,一些商业的ORM工具就出现了,比如TopLink。但由于其价格昂贵、结构复杂并且与Sun的实体bean标准相左,所以很少人会用。不管怎样,在持久化POJO方面,这些工具与JDBC和实体Bean相比确实有了很大的进步JavaDataObject于2001年在JavaCommunityProgress(www.jcp.org)的规范中出现。它为一般的POJO提供了大多数的持久化实现(尽管很多实现都是对关系数据库的)。但Sun公司以及其他的J2EE技术提供商对该技术表现的很冷淡。所以JDO也没有能够流行。Hibernate的出现ORM领域在2002年发生了大变化,原因有两个。首先,实体Beans在实践中失败,开发者们将其从J2EE中忽视掉了。它向开发者们说明了一个规范是如何将开发拉入泥潭的。另外的一个原因是Hibernate的发布,它是第一个功能健全的解决关系对象影射解决方案。虽然在功能上,它没有TopLink多样。但在那些最常用的功能上,Hibernate实现的更加健壮,并且有一个非常专业的团队提供全职的开发。Hibernate并不是全新的,它的ORM思想在这个领域很普遍,但它提供的编程模型比其他任何竞争者都容易使用、都来的直接,它为ORM的使用提供了更加易用、廉价的途径。于此同时,新一代的商业产品针对关系数据库提供了极其高效的JDO规范的实现。这样开发者的选择就更丰富了;还有,TopLink也朝着开发者友好的方向前进,它的liscense越来越开放了。ORM大获全胜。 所的这些因素是的ORM比以往更加规范。虽然很多项目仍然使用自己的持久层框架,但Hibernate,TopLink以及一些高端的JDO实现,使得使用自己持久层框架的难度相对变大、可维护性降低,自然,也没有什么理由去使用自己的框架了。55\n苏州科技学院本科生毕业设计(论文)虽然这些框架的功能覆盖范围已经很大了,但仍有很多地方不在其中。比如,一个基于struts,hibernate的项目,业务逻辑很难搞定。尽管对于这种问题,J2EE规范提出了解决方案(EJB),但仍旧没有一个合适的编程模型。Spring J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。本质上讲,Spring是IOC(InversionofControl)和面向切面编程(AOP)的组合体。它是一个非侵入式的框架,增强了POJO的功能。从服务上讲(Withaserviceabstraction),它将程序代码从J2EE环境解耦到普通的java对象(自然,这些代码可以脱离J2EE而在多种环境中运行)。它还在很多功能上提供了除EJB之外的选择――比如为所有的POJO提供声明式事务。Spring被广泛运用到很多项目中,从小的web程序到大的企业应用程序。在这个领域还有其他的产品,比如HiveMind和NamoContainer。前者和Spring的思想大致相同,只不过在IOC上有较大差异;后者将很多服务融合在PicoContainer的IOC容器中。这些产品的实现方式和J2EE的不同在于,它们都很轻便。在有J2EEAPI下做测试是非常困难的,这些容器将POJO从J2EEAPI中脱离出来,从而大大降低了测试的难度。测试一个普通的java对象,不用象测试J2EE程序那样,得先将应用程序部署到服务器上,要不就得自己动手模拟J2EE环境。提供日益流行的测试驱动的开发环境(对于开发者来说这是应得的),是这些轻量容器流行的关键因素。下一个将会是谁?人们日益对开源框架的重视,使得很多项目的成本大大降低,并且投放使用以及维护速度都增加了。现在的开源框架都有很高的质量,都提供了很好的文档&一些书籍让开发者做参考。即便如此,两大因素是的J2EE领域充满了不确定性:开源领域和J2EE“标准”的冲突和AOP的日益重要。55\n苏州科技学院本科生毕业设计(论文)开源和标准之间的冲突表现在两个地方。一个是表现层,JSF的身后有Sun公司和其他的一些大公司,而在这个领域有Struts等开源产品与之竞争。在中间层,EJB3.0采用J2SE5.0的annotations实现了依赖注入(dependencyinjection)的功能,但这个功能只是Spring的一个子集在这两个领域,开源产品都更加革新。JSP借鉴了ASP.NET,而Tapestry则采用了WebObjects的思想。同样的,不知道EJB3.0为何要尝试着标准化依赖注入,即使这样会使之不可避免地丧失很多功能。EJB3.0好像也要进入程序编写领域,而J2EE规范在这方面还没有涉足。于此同时,AOP的重要性在J2EE社区猛增,在使用上,AOP也越来越受到开发者的青睐。像Spring、dynaop等被称作“带着双拐的AOP”实现提升了AOP的知名度。而纯粹的AOP技术比如AspectJ,在将来的几年也会流行起来。其次,JBoss通过JCP和EJB3.0保持一致,它极大地推动了AOP技术。但即使如此,JCP还没有转向AOP迹象。下一代的J2EE规范将拥抱更简单的POJO编程模型,就像Spring和Hibernate做的一样。J2EE开发者也注定要从“欺诈客户”转到以自己的编程经验开发上来。这次改变将受到大多数人的欢迎,不像以前那样每一个新规范发布后,最终都没有能很好的实现。55\n苏州科技学院本科生毕业设计(论文)附录B外文原文J2EEDevelopmentFrameworksJava2EnterpriseEditionhasexcelledatstandardizingmanyimportantmiddlewareconcepts.Forexample,J2EEprovidesastandardinterfacefordistributedtransactionmanagement,directoryservices,andmessaging.Inaddition,Java2StandardEdition(J2SE),whichunderpinsJ2EE,providesalargelysuccessfulstandardforJavainteractionwithrelationaldatabases.However,asthe”J2EE’sLackofApplicationProgrammingSupport”sidebarexplains,theplatformhasfailedtodeliverasatisfactoryapplicationprogrammingmodel.SunMicrosystemsandthelargeapplicationservervendorshavetraditionallyrespondedtothisproblembyadvocatingdevelopmenttoolsasawaytohideJ2EE’scomplexity.However,toolsformanagingJ2EEartifactsaren’tnearlyasgoodastoolsforworkingwiththeJavalanguage,withtheirsophisticatedrefactoringcapabilities,andJ2EEtoolsupportisgenerallyinferiortothatoftheMicrosoft.NETplatform.ManyJ2EEtoolsarethemselvescomplex,asisthecodetheygenerate.Manyintheopensourcecommunity,especiallysmallervendors,havechosenthealternativeofdevelopingframeworksdesignedtosimplifytheexperienceofbuildingJ2EEapplications.PopularframeworkssuchasStruts,Hibernate,andtheSpringFrameworkplayanimportantroleinmanyoftoday’sJ2EEdevelopmentprojects.WHYUSEAFRAMEWORKAsoftwareframeworkisasetofclassesthatmakeupareusabledesignforanapplicationor,morecommonly,onetierofanapplication.Whereasapplicationcodeandthusmanagestheflowofcontrol.ThisisoftenreferredtoastheHollywoodprinciple:”Don’tcallus,we’llcallyou.”Theapplicationdeveloperwritescodethattheframeworkwillthencallatruntime.Designingaframeworkforuseinawidevarietyofunknowncontextsischallenging.However,theframeworkapproachiswelladaptedtothecomplexitiesofJ2EEdevelopmentbecauseitcanprovideasimple,easy-to-usemodelforapplicationprogrammers.Usingawell-designedopensourceframeworkoffersmanyadvantages:*Withagoodframework,developerswriteonlythecodetheyneedtowrite;Theydon’tgetboggeddownworkingdirectlywithlowinfrastructureAPIs.Thisisthekeyvalueproposition.*Awell-designedframeworkcanprovidestructureandconsistencytoanapplication.Thestructurewillbecleartoadditionaldevelopersjoiningtheproject.*Aneasy-to-followframeworkcanpromotebestpracticethroughexamplesanddocumentation.*Successfulopensourceframeworksarebettertestedthaninhousecode.*Frameworksusuallybecomepopularonlyiftheyhavesomethingtooffer.In-houseframeworksareoftenmandated,whileaJ2EEprojectislikelytoadoptanopensourceframeworkonlyifitdeliversclearbenefits.55\n苏州科技学院本科生毕业设计(论文)J2EEitselfdefinesseveralframeworks.Forexample,anEnterpriseJavaBeans(EJB)containerorServletenginereliesontheHollywoodprinciple,withtheJ2EEruntimeinstantiatingandinvokingmanagedobjects.OpensourceWebapplicationframeworkssuchasStrutsaddtheirownframeworkoverthestandardServletframework.TheemphasisisonframeworksaboveJ2EE,whichprovideasimplerprogrammingmodelorotherbenefits.OPENSOURCEFRAMEWORKSEMERGEMostlargeJ2EEprojectshavetraditionallyusedinhouseframeworkstohidetheplatform’scomplexity.Onlyrecentlyhasaconsensusemergedaboutthegenericproblemsthatprovidegoodgenericsolutions.Thereisnowacleartrendforframeworksto“standardize”moreoftheinfrastructurethatformerlywasdevelopedonaper-projectbasis.OnereasonforJ2EEframeworks’suddenpopularityistheplatform’sincreasedmaturity.DevelopersnowrecognizeareasinwhichthestandardAPIsaredeficientandknowfromexperiencehowdifficultitistowriteagoodframeworktofillthegap.Inaddition,manyhigh-qualityframeworksarenowavailablethatofferoutstandingdocumentationandthesupportofafocuseddevelopmentteam,withoutimposinglicensingfees.StrutsThetrendtowardopensourceframeworksbeganwithWebapplications.In1999-2000,developersrealizedthedeficienciesofthejavaServerPages”Model1”approach,inwhichJSPtemplateshandledincomingrequestsaswellasstatictemplatedata.ThismeantthatJSPoftencontainedbothbusinesslogicandcomplexHTMLorothermarkup.WithnostandardframeworkinplaceJ2EEspecificationsupport,developersrespondedwiththeirownFrontControllerimplementations.ThesemovedbusinesslogictoJavaclasses,therebyeliminatingtheneedtomaintainsuchhybridartifacts.TheFrontControllerpatternisoftenreferredtoasWebMVCaftertheclassicModelViewControllerarchitecturepatternthatiscommontoGUIdevelopmentinobject-orientedlanguages.(ThenameissomewhatmisleadinginthatWebMVCviewsmustpullinformationfromthemodel,whereasinclassicMVC,themodelpusheseventstoviews.)InitialFrontControllerimplementationsvariedgreatlyinquality.TheApacheSoftwareFoundation’sreleaseofStrutsin2001-2002changedallthis.WhilenotanidealWebMVCframework,Strutsworkedwellenoughtoquicklybecomethedefactostandard.Strutsdemonstratedallthebenefitsofopensourceframeworkssuchaseaseofrecruitingpersonnelfamiliarwiththestructureitimposed.Bylate2002,itwasthenaturalchoiceformostJ2EEWebapplications,andeveryseriousJ2EEWebdeveloperwasfamiliarwithit.Thenear-universaladoptionofStrutscommoditizedanimportantchunkoftheJ2EEarchitecturalstack.EvenconservativeorganizationsaccepteditsuseinaprominentpartoftheirsoftwareinfrastructureandagreedtotheApachelicense’sterns.HibernateThenextdominotofallwaspersistence.J2EE“outofthebox”providedtwomeans55\n苏州科技学院本科生毕业设计(论文)foraccessingpersistentstores-mostoften,relationaldatabase:JDBC,theJ2SEstandardAPIforrelationaldatabasemanagementsystemaccess;andentitybeans,anEJBcomponenttypededicatedtomodelingapersistententity.JDBCiserror-proneprogrammingmodelinhibitedobject-orienteddesignbyforcingdeveloperstoworkwithrelationalconceptsinJavacode.Entitybeans,despitehypefromSunandmajorJ2EEvendors,likewiseprovedtobecumbersome:Initially,thetechnologywasseverelyunderspecified,noteventakingintoaccountmanagementofrelationshipsbetweenpersistentobjects;itmadeapplicationsdifficulttotest;anditofferedaninadequatequerylanguage.By2003,developerslargelyignoredentitybeansdespiteenhancementsinEJB2.0and2.1.EarlyeffortsSolutionstothepersistenceproblemcameintheformofobject-relationalmapping,whichprovidestransparentpersistenceforplainoldJavaobjects,aconceptdescribedinthesidebar,“TheNoninvasiveFramework:PowertothePOJO.”ThoughnotuniquetoJava,ORMisespeciallypopularintheJavacommunity-compared,forexample,to.NETdevelopers,whoseemtoregarditwithsuspicion.CommercialORMtoolssuchasOracle’sTopLinkwerewellestablishedbythelate1990s,butonlyaminorityofprojectsusedthembecausetheywereexpensive,complex,andappearedtoconflictwiththeSun-sanctionedentitybeanstandard.Nevertheless,theyusuallyachievedbetterresultsinpracticethanJDBCorentitybeans,thusprovingthecaseforPOJOpersistence.JavaDataObjects,whichappearedasaJavaCommunityProcessspecificationin2001,offeredgenericPOJOpersistencetoanypersistentstore(althoughimplementationstypicallyprovidedtheirbestsupportforrelationaldatabase).However,Sun’slukewarmattitudetowardJDO,coupledwithJ2EEvendors’lackofinterestinPOJOpersistenceatthattime,preventedthetechnologyfromachievingpopularity.HibernatearrivesRadicalchangecamein2002fortworeasons.Firstwaswidespreadrealizationthatentitybeanshadfailedinpractice,andthatdevelopersshouldignorethatpartofJ2EEspecifications.ByretardingratherthanadvancingtheprogressofORMinJava,entitybeansremainaprimeexampleofhowpoorspecificationscanstifledevelopmentofsuperiortechnologies.ThesecondfactorwasthearrivalofHibernate,thefirstpopular,fullyfeaturedopensourceORMsolution.HibernateofferedfewerfeaturesthanTopLinkbutdeliveredarobustimplementationofthemostdesirableones,anditsfocuseddevelopmentteamaggressivelysoughtimprovements.Hibernatewasn’tparticularlyinnovative,buildingontheextensiveunderstandingofORM,butitofferedamoreintuitiveprogrammingmodelthanexistingcompetitorsandremovedatonestrokecostandease-of-usebarrierstoORM.Aroundthesametime,newcommercialproductsofferedhighlyefficientimplementationsoftheJDOspecificationthattargetedrelationaldatabases,givingdevelopersarichchoice.Meanwhile,TopLinkremainedagoodoption,withitslicensebecomingfriendliertodevelopers.ORMtriumphsTogether,allthesefactorsconvergedtomakeORMthenormratherthantheexceptionby2003-2004.Althoughsomeprojectsstillbuilttheirownpersistence55\n苏州科技学院本科生毕业设计(论文)frameworks,theexistenceofHibernate,TopLink,andleadingJDOimplementationsmadethisextremelydifficultundertakingunnecessaryandindefensible.Anotherpartoftheapplicationstackwasnowwithinthedomainofpopularframeworks,yetlargegapsremained.Forexample,atypicalWebapplicationusingStrutsandHibernatestilllackedframeworksupportforbusinesslogic.AlthoughJ2EEspecificationsaddresssomeoftheseissues,primarilythroughEJB,theydon’tprovideanadequateapplicationprogrammingmodel.SpringJ2EEframeworkshaveinexorablymovedintoapplicationframeworks,whichaimtoprovideconsistentprogramminginalltiersandtherebyintegratetheapplicationstack.TheSpringFrameworkisthedominantproductinthisspace,withadoptioncomparabletothatofHibernate.Springessentiallycombinesinversionofcontrolandaspect-orientedprogramming(AOP)-bothdescribedinthesidebar,“TheNoninvasiveFramework:PowertothePOJO”–withaserviceabstraction,toprovideaprogrammingmodelinwhichapplicationcodeisimplementedinPOJOthatarelargelydecoupledfromtheJ2EEenvironment(andthusreusableinvariousenvironments).SpringalsoprovidesanalternativetoEJBinmanyapplications–forexample,deliveringdeclarativetransactionmanagementtoanyPOJO.TheSpringapproachhasproventodeliverexcellentresultsinmanykindsofprojects,fromsmallWebapplicationstolargeenterpriseapplications.OtherproductsinthesamespaceincludeHiveMind,whichisconceptuallytoSpringbuthasasomewhatdifferenttakeonIOC,andNanoContainer,whichcombinesthePicoContainerIOCcontainerwithservices.Collectively,theseproductsarereferredtoaslightweightcontainerstodistinguishthemfromtraditionalJ2EEapproaches.BydecouplingaPOJOmodelfromJ2EEAPIs,whicharehardtostubattesttime,lightweightcontainersgreatlysimplifyunittesting.It’spossibletounittestinaplainJUnitenvironment,withoutanyneedtodeploycodetoanapplicationserverortosimulateanapplicationserverenvironment.Giventheincreased-anddeserved-popularityoftest-drivendevelopment,thishasbeenamajorfactorinlightweightframeworks’popularity.WHAT’SNEXT?GrowingrecognitionanduseofJ2EEdevelopmentframeworksismeasurablyreducingcostinmanyprojects,aswellasdeliveringbetterspeedtomarketandhighermaintainability.Today’sbestframeworksofferexcellentquality.Soliddocumentation,andnumerousbooksandarticlestosupporttheiruse.Nevertheless,twoareasinparticularseemsetforuncertaintyintheJ2EEspace:theconflictbetweenJ2EE“standards”andopensourceinnovation,andthegrowingimportanceofAOP.Theopensourceversusstandardsconflictloomsintwoareas.Inthepresentationtier,JavaServerFaces,backedbySunandsomeofthelargestvendors,competeswithentrenchedopensourcesolutionssuchasStruts.Inthemiddletier,EJB3.0offersadependencyinjectioncapabilityreminiscentofasubsetofSpring’scapabilities,mixedwithliberaluseofJ2EE5.0annotations.Inbothareas,innovationhastraditionallycomefromopensourceratherthanspecifications.However,JSPissomewhatindebtedtoASP.NET,whiletheopensourceTapestryproject-amatureimplementationofmanyofthesameconcepts-owesmuchtoApple’scommercialWebObjects.55\n苏州科技学院本科生毕业设计(论文)Likewise,EJB3.0seemstobeattemptingtostandardizedependencyinjection,thoughit’sunclearwhatbenefitthisbring-especiallyifresultsinthelossofimportantfeatures,whichseemsinevitable.EJB3.0alsoattemptsanewdepartureinenteringtheapplicationprogrammingspace:anareainwhichtheJ2EEspecificationshaven’tshonetodate.Meanwhile,AOPisimportanceissteadilyincreasingwithintheJ2EEcommunity.Whileadoptionisn’tyetwidespread,certainusesofAOP,suchasdeclarativetransactionmanagement,aredeclarativetransactionmanagement,arealreadypopular.SolutionsincludingSpringanddynaop,whichofferwhatmightbecalled“AOPwithtrainingwheels,”helptoincreaseawarenessofAOP.FullblownAOPtechnologiessuchasAspectJwilllikelyexperiencewideradoptioninthenextfewyearsaswell.Significantly,theJavaCommunityProcessshowsnosignofanymovetostandardizeAOP,althoughJBoss-whichisovertlycommittedtoworkingthroughtheJCPwiththeEJB3.0specification-isvigorouslypursuingproprietaryAOPtechnology.Thenext-generationJ2EEspecificationsasawholeareembracingasimpler,POJOprogrammingmodel,similartothatalreadyofferedbycombinationssuchasSpringandHibernate.J2EEdevelopersaresuretobenefitfromrecenttrends,whicharedrivenmorebypracticalexperiencethanbymarketinghype.Thisisawelcomechangefromtheplatform’searlydays,whenresultsoftenfailedtoliveuptothepromiseheldoutbyvendors.55

相关文档