基于bs结构的数字酒店管理系统的设计与实现_第1页
基于bs结构的数字酒店管理系统的设计与实现_第2页
基于bs结构的数字酒店管理系统的设计与实现_第3页
基于bs结构的数字酒店管理系统的设计与实现_第4页
基于bs结构的数字酒店管理系统的设计与实现_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于B/S结构的数字酒店管理系统的设计与实现中文摘要数字酒店管理系统是一个由人、计算机和数据库组成的进行酒店经营管理的系统,通过对信息的收集、传递、整理、加工、维护和使用,提高管理水平和效率,从而实现酒店管理的自动化、规范化和人性化。本系统采用流行的WEB应用开发框架STRUTSPOJOHIBERNATE来实现;数据库的设计上,采用MYSQL来支持各种信息,保障数据安全。使用ECLIPSEMYECLIPSE、APACHETOMCAT520开发工具开发。本系统包括了前台功能用户注册、用户登录、顾客订餐、菜单信息查询、顾客订房,客房信息查询以及客户付款;后台功能用户管理,菜肴信息维护,客房信息维护,就餐计划管理,就餐管理,住宿计划管理,住宿管理等。本文简要介绍了基于MYSQL数据库系统和采用JAVA程序语言开发的基于B/S结构的酒店管理系统的设计与实现,着重阐述了该系统开发实现过程,从系统采用的开发工具,开发平台以及架构介绍到方案论证、系统功能介绍和开发过程对遇到问题的分析和解决等各个环节都进行了较为详尽的分析和描述。关键词酒店管理信息系统MYSQLJAVAB/STHEDESIGNANDIMPLEMENTATIONOFTHEDIGITALHOTELMANAGEMENTSYSTEMBASEDONB/SARCHITECTUREABSTRACTTHEHOTELMANAGEMENTINFORMATIONSYSTEMCOMPOSESOFHUMAN,COMPUTERANDDATABASE,WHICHISUSEDTODOHOTELMANAGEMENTTHROUGHTHECOLLECTION,TRANSMISSION,SORTINGOUT,PROCESSING,SAFEGUARDINGANDUSINGOFINFORMATION,IMPROVEMANAGEMENTLEVELANDEFFICIENCY,THUSREALIZETHEAUTOMATIZATION,STANDARDIZATIONANDHUMANIZATIONOFMANAGEMENTOFHOTELSFORTHISSYSTEM,WEUSEFASHIONABLEWEBAPPLICATIONEXPLOITFRAMEWORKSTRUTSPOJOHIBERNATETOREALIZEWEUSEMYSQLTOSUPPORTVARIOUSKINDSINFORMATIONANDENSURETHESAFETYOFDATAFORDESIGNINGDATABASEWECHOOSEECLIPSEMYECLIPSEANDAPACHETOMCAT520ASDEVELOPMENTTOOLSTHISSYSTEMINCLUDEPROSCENIUMFUNCTIONUSERREGISTER,USERLOGIN,ORDERMEAL,INQUIRYMEALMESSAGE,INQUIRYROOMMESSAGE,ORDERROOMANDCLIENTPAYFORTHEORDERTHEBACKGROUNDFUNCTIONUSERMANAGEMENT,DISHMESSAGEMAINTAIN,GUESTROOMMESSAGEMAINTAIN,EATINGPLANMAINTAIN,EATINGMANAGEMENT,LODGINGPLANMANAGEMENT,LODGINGMANAGEMENTANDSOONTHISPAPERHASBRIEFLYINTRODUCEDTHEDESIGNANDIMPLEMENTATIONOFTHEHOTELMANAGEMENTINFORMATIONSYSTEMWHICHBASESONB/SARCHITECTUREANDISDEVELOPEDWITHMYSQLANDJAVAPROGRAMMINGLANGUAGE,EMPHATICALLYEXPLAINEDTHATSHOULDDEVELOPTHECOURSEOFREALIZINGSYSTEMATICALLY,FROMTHEINTRODUCTIONOFTOOLS,PLATFORMANDSTRUCTUREWHICHISADOPTEDFORDEVELOPMENT,TOTHEDEMONSTRATIONOFPROGRAMME,THEINTRODUCTIONOFTHESYSTEMFUNCTIONANDTHEANALYSISANDSOLUTIONOFTHEDIFFICULTYWHICHTURNEDUPDURINGTHEDEVELOPMENT,ALLTHATWHATAREMETIONEDBEFOREAREEXHAUSTIVLYANALYSEANDDESCRIPTEINDETAILKEYWORDSTHEHOTELMANAGEMENTINFORMATIONSYSTEMMYSQLJAVAB/S目录第一章前言1第二章系统概述3第三章开发平台介绍4第四章开发工具介绍541ECLIPSEMYECLIPSE介绍5411ECLIPSE简介5412MYECLIPSE的功能和特点542APACHETOMCAT520介绍643MYSQL数据库介绍6431MYSQL的特性6432MYSQL的应用7第五章系统架构介绍851三层架构介绍8511三层架构简介8512各层职责8513实际应用介绍952B/S架构介绍9521C/S与B/S架构比较9522B/S简介11第六章课题目前在国内外的研究及应用开发现状1261该课题在国内外的研究动态12611国外研究动态12612国内研究动态1362该课题的应用开发现状13第七章需求分析1471系统总体结构图1472系统业务模型图1473系统用例图1574系统业务流程图16741餐饮前台业务办理和后台管理流程图16742住宿前台业务办理和后台管理流程图17第八章数据库设计1881概念设计1882逻辑设计25821数据库表汇总25822具体表结构26第九章系统的关键技术以及要点介绍2991JSP简介29911JSP简介29912JSP的特点2992STRUTS框架31921采用该框架的背景及原因31922MVC设计模式概述31923STRUTS框架介绍3293POJO(JAVABEAN)介绍33931POJO概述33932JAVABEAN使用规范34933JAVABEAN的特点3494HIBERNATEO/RMAPPING35941持久化和持久层的定义35942HIBERNATE介绍35943HIBERNATE的体系结构35第十章系统功能介绍38101功能模块分析38102各功能模块说明381021前台功能介绍381022后台功能介绍40第十一章开发中解决的主要技术难题47111表示层出现的技术难题471111对用户信息的获取471112页面乱码的处理48112业务层出现的技术难题491121事务的提交501122SESSION线程安全50113持久层出现的技术难题521131在HIBERNATE的映射文件中对于CASCADE属性的设置521132在HIBERNATE的映射文件中对于INVERSE属性的设置53第十二章开发的心得体会与收获55参考文献57致谢58第一章前言11课题的来源近年来,随着改革开放步伐的加快和中西方文化的交流与发展,我国人民生活水平显著提高,全社会对餐饮业的需求量也越来越大,伴随着消费的持续增长,酒店行业已经成为现代社会中发展最快的行业之一。要想在激烈的市场竞争中生存,就必须在经营管理、餐饮服务等方面提高管理意识。而对酒店的经营状况起决定作用的是对酒店日常营业的管理,所以应势而出的酒店管理系统有着很好的可行应用性。传统的酒店系统大都使用C/SCLIENT/SERVER模式的计算机信息管理系统,这种C/S模式在20世纪90年代分布式处理中起到主流系统的作用,它有着自身的一些优点,如通过在客户和服务之间划分各自所包含的层次,提高了应用的计算效率,缓解终端/主机模式中主机繁重的负担,在终端/主机模式和文件服务器模式中找到平衡等然而随着酒店规模的日益扩大,应用程序的复杂程度不断提高,传统的C/S模式逐渐暴露出许多问题,如系统的可移植性、可扩展性、可维护性都很差等,同时,随着INTERNET迅速普及以及中国加入WTO,酒店管理也面临着许多新的挑战和机遇,如提供远程客房预定、餐饮预定、网上信息发布等等。因此,酒店迫切需要开发出基于B/SBROWSER/SERVER模式的酒店管理系统,以适应当前酒店行业的发展,提供更好的服务和提高酒店的经济效益1。12课题采用的技术因此,针对上述情况,我开发了一个基于B/S结构的数字酒店管理系统。它采用表示层、业务层,持久层三层架构,采用B/S结构以及三层架构的好处主要是基于B/S结构的系统使得客户端无专用程序,应用程序全部集中在应用服务器,这更便于应用程序的维护管理,降低用户应用成本。软件的系统升级和功能改进变得更加容易,当程序和系统需要更改时,只需要在WEBAPPLICATIONSERVERTIER上修改程序的界面和系统的业务逻辑,减少了系统维护和修改的工作量,特别适合互联网时代的应用需要。再者,对于业务逻辑比较复杂的系统,分层处理会更加方便和清晰,并且测试就比较容易,思路也清晰,可以减少模块之间的耦合性,最后本系统使用JAVA面向对象学编程语言开发,可以解决跨平台的问题,并且提高系统的安全性。13课题达到的目标本次设计的数字酒店管理系统分为前台操作和后台处理,以数据库为核心。整个系统围绕顾客就餐和住宿的业务流程而设计。该系统全面、正确、完整、及时地收集、加工、整理在整个就餐和住宿的业务流程中所发生的各类有关信息,具有检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等优点。这些优点能够极大地提高宾馆管理的效率,也是宾馆的科学化、正规化管理,与世界接轨的重要条件。第二章系统概述21系统简介本文的数字酒店管理系统是一套比较复杂的软件,它是依据大中型酒店和宾馆的营业点,结合计算机信息管理的特点,利用计算机网络及其它通讯工具设施对酒店业务信息进行及时有效管理的一个应用软件。22系统功能简介数字酒店管理系统分为前台操作和后台处理,以数据库为核心。整个系统围绕顾客就餐和住宿的业务流程而设计。总体上,其功能贯穿2条线一条线贯穿着客户注册、查询就餐计划或住宿计划信息、预定就餐订单或住宿订单信息、更改就餐或住宿订单信息、取消预定的就餐或住宿订单信息等;另一条线是对菜肴、餐桌、客房、客户信息的维护,以及根据酒店就餐时间和餐桌的具体调度安排和住宿时间和客房的具体调度安排来制定就餐计划和住宿计划,并负责打印统计报表和相关的单据。该系统全面、正确、完整、及时地收集、加工、整理在整个就餐和住宿的业务流程中所发生的各类有关信息。第三章开发平台介绍31J2EE平台简介本系统的开发平台是J2EE。J2EE本身是一个开放的标准是美国SUN公司刚刚推出的一种全新概念的模型,与传统的互联网应用程序模型相比有着不可比拟的优势。当今许多企业都需要扩展他们的业务范围,降低自身经营成本,缩短他们和客户之间的响应时间,这就需要存在一种简捷,快速的服务于企业,合作伙伴和雇员之间。典型的说,提供这些服务的应用软件必须同企业信息系统(EIS)相结合,并提供新的能向更为广阔的用户提供的服务。这些服务要具备以下的特点A高可用性来满足现在的全球商业环境B安全性保护用户的隐私和企业数据的安全C可依赖性和可扩展性保证商业交易的正确和迅捷通常这些服务是由分布的应用程序组成的,包括前端数据端和后端数据源以及它们之间的一层或几层,这些中间层提供了把商业功能和数据与EIS相结合的功能。这些中间层把客户端从复杂的商业逻辑中分离出来,利用成熟的INTERNET技术使用户在管理上所花费的时间最小化。J2EE正式降低了开发这种中间层服务的成本和复杂程度,因而使得服务可以被快速的展开,并能够更轻松的面对竞争中的压力。J2EE通过定义一种标准的结构来实现它的优势,如下AJ2EEAPPLICATIONPROGRAMMINGMODEL一种用于开发多层次,瘦型客户用户程序的标准设计模型BJ2EEPLATFORM一个标准的平台,用来整合J2EE的应用程序,指定一系列的接口和方法CJ2EECOMPATIBILITYTESTSUITE一套兼容测试组件,用来检测产品是否同J2EE平台兼容DJ2EEREFERENCEIMPLEMENTATION用来示范J2EE的能力第四章开发工具介绍41ECLIPSEMYECLIPSE介绍411ECLIPSE简介ECLIPSE是一款非常优秀的开源IDE(INTEGRATEDDEVELOPMENTENVIRONMENT,集成开发环境),非常适合JAVA项目的开发。由于它支持插件开发技术,因而受到了很多开发者的欢迎。其中MYECLIPSE是ECLIPSE的一个优秀插件,它是一个专业的软件开发平台,它为软件开发提供了丰富的工具和系统的支持。MYECLIPSE是基于工业开发标准的ECLIPSE平台来工作的,所以它提供了对一系列软件开发技术、组件以及应用开发环境的支持。其中包括J2EE,XML,UML,各种类型的数据库以及各种应用服务器的支持。并且可以针对每种不同的应用环境提供对开发、部署、测试环节的优化工作。412MYECLIPSE的功能和特点MYECLIPSE主要具有以下功能和特点JAVA的专业开发工具。提供了JSP、JSF、STRUTS、JSTL、XML、XSD,SERVLETS,EJB的图形化开发环境以及对各种应用服务器的部署和各种调试功能的支持。数据库开发工具。提供了数据浏览、SQL编辑、数据修改、触发器和存储过程开发等一系列与数据库相关的开发工具。辅助RAD开发工具。提供了包括类图、序列图、部署图、状态图等各种UML图形的支持。POJO开发工具。提供了对SPRING,EJB,HIBERNATE,WEB服务以及XDOCLET的辅助开发。AJAX与WEB20的辅助开发工具。提供了包括对JAVASCRIPT编辑、CSS编辑、XML编辑、HTML编辑、JAVASCRIPT调试控制台、DOM观察器等一系列的辅助开发工具3。42APACHETOMCAT520介绍TOMCAT是APACHEJARKARTA的一个子项目,是一个免费的、开放源码的、支持JSP和SERVLET技术的容器,它同时又是一个WEB服务软件。TOMCAT很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。TOMCAT是一个小型的轻量级应用服务器,在中、小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以说这样认为,当一台机器上配置好APACHE服务器,可利用它响应对HTML页面的访问请求。实际上TOMCAT部分是APACHE服务器的扩展,但它是独立运行的,所以当你运行TOMCAT时,它实际作为一个与APACHE独立的进程单独运行的4。43MYSQL数据库介绍MYSQL是一个小型关系型数据库管理系统,开发者为瑞典MYSQLAB公司。目前MYSQL被广泛地应用在INTERNET上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MYSQL作为网站数据库。431MYSQL的特性1使用C和C编写,并使用了多种编译器进行测试,保证源代码的可移植性2支持AIX、FREEBSD、HPUX、LINUX、MACOS、NOVELLNETWARE、OPENBSD、OS/2WRAP、SOLARIS、WINDOWS等多种操作系统3为多种编程语言提供了API。这些编程语言包括C、C、EIFFEL、JAVA、PERL、PHP、PYTHON、RUBY和TCL等。4支持多线程,充分利用CPU资源5优化的SQL查询算法,有效地提高查询速度6既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的SHIFT_JIS等都可以用作数据表名和数据列名7提供TCP/IP、ODBC和JDBC等多种数据库连接途径8提供用于管理、检查、优化数据库操作的管理工具9可以处理拥有上千万条记录的小型数据库432MYSQL的应用与其他的大型数据库例如ORACLE、DB2、SQLSERVER等相比,MYSQL自有它的不足之处,如规模小、功能有限(MYSQL不支持视图(已经被列入51版的开发计划)、事件等)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MYSQL提供的功能已经绰绰有余,而且由于MYSQL是开放源码软件,因此可以大大降低总体拥有成本5。第五章系统架构介绍51三层架构介绍511三层架构简介目前开发人员对系统开发的一个共识是使用三层架构,分为表示层,业务层,和持久层。而这三层之间的依赖关系是表示层业务层持久层。这表明了层与层之间的调用关系,表示层通过调用业务层来完成任务,而业务层则调用持久层。从另一个角度来看,一种依赖关系是表示层领域模型DOMAINMODEL标签来构造和访问JAVABEAN。标准的GETTERS和SETTERS方法和无参数构造函数支持这些标准的访问方法8。933JAVABEAN的特点其最大的优点在于可以实现代码的可重用性。JAVABEAN又同时具有以下特性。1)易于维护、使用、编写。2)可实现代码的重用性。3)可移植性强,但仅限于JAVA工作平台。4)便于传输,不限于本地还是网络。5)可以以其他部件的模式进行工作。对于有过其他语言编程经验的读者,可以将其看作类似微软的ACTIVEX的编程组件。但是区别在于JAVABEAN是跨平台的,而ACTIVEX组件则仅局限于WINDOWS系统。总之,JAVABEAN比较适合于那些需要跨平台的、并具有可视化操作和定制特性的软件组件11。94HIBERNATEO/RMAPPING941持久化和持久层的定义持久化(PERSISTENCE),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。这样引出了所谓“持久层(PERSISTENCELAYER)的概念即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面。将数据使用者和数据实体相关联。持久层的基本出发点是数据对象的存储和使用逻辑分开。持久化的数据对象能将自身保存在存储设备中,并且在需要的时候从存储设备中恢复。这样,在处理复杂的业务逻辑的时候,就不需要考虑对象存储恢复的细节操作,而将经历集中在如何使用这些数据对象上。上层完全体会不到存储设备的细节。无论是用流式文件、XML文件、还是用任何一种数据库,或者若干数据库的集合,持久层将屏蔽这些底层的不同,而对上层业务提供一致的接口,提供软件的灵活性和重用性8。942HIBERNATE介绍HIBERNATE是采用ORM模式实现数据持久层的一个优秀的JAVA组件,它提供了强大、高效的将JAVA对象进行持久化操作的服务。利用HIBERNATE,开发人员可以方便地按照JAVA对象的结构进行持久层的开发,并可以使用HIBERNATE所提供的HQL(HIBERNATEQUERYLANGUAGE,HIBERNATE查询语言)完成JAVA对象和关系型数据库之间的转换和操作。943HIBERNATE的体系结构1、HIBERNATE的作用就是实现持久化对象和数据库之间的映射。所以,它在应用程序的位置也必然是处于程序和数据库之间,形成持久化对象和数据库表中数据的一个转换平台。HIBERNATE应用程序的结构如图95HIBERNATE属性文件XML映射持久化对象应用数据库通过图可以看出,HIBERNATE是通过一系列的配置文件和数据库来实现持久化对象的持久化操作。为了使用HIBERNATE,需要创建与数据库中的表相对应的持久化对象,然后再通过映射文件将持久化对象中的属性与数据库中的字段对应起来。这样,才能通过这些持久化对象完成对数据表中数据的增加、修改、查询和删除操作。2、HIBERNATE的体系结构由于HIBERNATE非常灵活,而且同了多种运行时的结构组成方案。在这里介绍的是一个“最全面”的体系结构,它最大程度的完成了对持久层功能的封装,也就使得在开发中所要完成的工作量最少,是在开发中最经常使用的一种方式。在这种方式分中,将JDBC/JTA都交给了HIBERNATE去完成,而不需要对这一部分进行任何处理。这样的HIBERNATE体系结构如图96所示10。图95HIBERNATE应用程序结构图96HIBERNATE的体系结构第十章系统功能介绍101功能模块分析数字酒店管理系统分为前台操作和后台处理,以数据库为核心。整个系统围绕顾客就餐和住宿的业务流程而设计。总体上,其功能贯穿2条线一条线贯穿着客户注册、查询就餐计划、预定就餐订单、更改就餐、取消预定的就餐等;另一条线是对菜肴、客户信息的维护,以及根据酒店就餐时间安排来制定就餐计划并负责打印统计报表和相关的单据。102各功能模块说明1021前台功能介绍1用户注册功能描述如果用户不是合法用户就要求注册后登录系统。2用户登录功能描述对用户登录的信息进行验证,如果不是合法用户就要求注册。如果是合法用户就正常登录系统。3顾客订餐功能描述根据查询好的就餐计划信息、具体的就餐时间和所订的菜信息来确定就餐信息。如图所示用户首先进入订餐界面,浏览菜肴信息,并进行点菜图101点菜界面订餐完毕后,界面将显示用户所订菜肴数量以及金额图102点菜明细界面4顾客住宿功能描述根据的客房信息来确定住宿计划。如图所示用户首先进入订房页面,浏览客房信息,并进行订房,其中显示的空余数量会随着房间被预定而逐渐减少图103订房界面图104订房明细界面客房一旦被预订后空余数量会自动减少图105客房信息列表5客户付款功能描述在确定了就餐信息或住宿信息后选择付款方式支付此笔就餐或住宿的费用。如图所示图106提交订单界面提交订单后返回显示客房信息列表的页面,发现客房空余数量由10间减少到3间图107客房信息列表1022后台功能介绍1用户管理功能描述对顾客和系统管理员用户信息的增(注册)、删(注销)、查(精确和模糊两种查询方式按编号、登录时间和姓名查询)、改(更新)。如图所示图108添加顾客界面图109顾客信息列表2菜肴信息维护功能描述对菜肴类型和菜肴信息的增、删、查(精确和模糊两种查询方式按名称查询)、改。如图所示图1010添加菜肴类型图1011菜肴类型列表图1012添加菜肴图1013菜单对菜肴按名称进行模糊查询图1014菜肴查询图1015菜单图1015菜肴类型修改图1015菜肴列表3客房信息维护功能描述对客房类型信息、客房信息的增、删、查(精确和模糊两种查询方式按名称和空余数量查询)、改。如图所示图1016添加客房类型图1017客房类型列表图1018添加客房图1019客房信息列表图1020客房信息修改图1021客房信息列表图1022客房查询图1023客房信息4就餐计划管理功能描述对就餐计划信息的维护。即对就餐计划的增删查改。5就餐管理功能描述对就餐信息的维护。即对就餐计划的增删。6住宿计划管理功能描述对住宿计划信息的维护。即对住宿计划的增删查改。7住宿管理功能描述对住宿信息的维护。即对住宿计划的增删。图1024消费清单审核图1025历史消费清单图1026历史消费明细8帐单管理功能描述根据就餐信息或住宿信息来完成对帐单信息的统计和维护。9报表管理功能描述根据不同的日期实现对就餐信息、住宿信息和帐单信息的统计。第十一章开发中解决的主要技术难题本系统共分为3层,分别为表示层,业务层和持久层,下面将就在开发过程中,每个层所遇到的主要技术难题进行分析并阐述解决的方法。下面将按照提出问题,分析问题,解决问题这3个步骤对遇到的难题进行讲解。111表示层出现的技术难题1111对用户信息的获取1提出问题在JSP页面中,服务器经常要根据用户的请求在客户端浏览器显示用户请求的一些数据信息,而这些数据信息如何获取就成为在系统开发过程中需要考虑的一个重要的问题,并且我们要从效率的角度去选择较优的获取方案。2分析问题在WEB应用系统中,服务器经常要处理用户要求获得相关数据的请求,有两种实现方案,一个是服务器每次都从数据库中获取数据,并返回到客户端浏览器显示,另一个则是直接从JSP的内置对象SESSION中存取用户信息,然后返回给客户机。显然从执行效率方面考虑,第二个方法比较好,因为如果每次都从数据库中取数据,都要先与数据库建立连接,并且在HIBERNATE中,每次通过SESSION来查找对象,都要先FLUSH它的缓冲区,才执行查找操作,而且数据库操作时磁盘操作,比起直接从内存中取数据要慢,并且如果多用户访问数据库时更会降低执行的效率,再者对数据库进行频繁地连接关闭操作,也会占用许多资源,最后,SESSION的生命周期是开始于用户连接服务器,结束于客户端与服务器断开连接的那刻,生命周期很长,因此它可以在用户在访问网页的整个过程中都有效。因此经过比较,使用SESSION来获取用户信息比从使用数据库获取要好。3解决问题在JSP页面中调REQUESTGETSESSIONFALSEGETATTRIBUTESTRING,NAME即可获得SESSION中保存的参数名称为NAME的参数值,这个值可以使任何类型的对象但每次客户端的数据发生变化后,都必须更新SESSION中的信息,通过调用REQUESTGETSESSIONFALSESETATTRIBUTESTRINGNAME,OBJECTVALUE方法,将参数名为NAME的参数值设为VALUE,若该参数已有值,那么该值将被覆盖。REQUESTGETSESSIONFALSESETATTRIBUTESTRING,OBJECT这句代码实现的功能首先获得REQUEST对象的HTTPSESSION对象,如果该对象不存在将不会新创建一个,以免因为SESSION不正确而无法正确获得对应用户的相关数据,然后再通过指定的参数名将数据与该SESSION绑定。1112页面乱码的处理1提出问题若将数据库中的字段值为中文的数据信息显示在页面,会出现乱码。2分析问题那是因为数据库中字符集设置与页面的字符集设置不匹配的缘故。3解决问题要对每次客户端的请求信息进行字符编码的设置,这里将使用过滤器来对每次的请求进行处理。下面将简要介绍下过滤器。(1)过滤器的简介SERVLET过滤器拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。过滤器在运行时由SERVLET容器调用来拦截和处理请求和响应。SERVLET过滤器用于拦截传入的请求或传出的响应,并监视、修改或以某种方式处理正在通过的数据流。过滤器只在改动请求和响应的运行时处理,因而不应该将它们直接嵌入WEB应用程序框架中。像SERVLET一样,过滤器接受请求并响应对象,然后会检查请求对象,并决定将该请求转发给链中的下一个组件,或者终止该请求并直接向客户机发回一个响应。如果请求被转发了,它将传递给链中的下一个资源,可能是另一个过滤器、SERVLET或JSP页面。在这个请求设法通过过滤器链并被服务器处理之后,一个响应将以相反的顺序通过该链发送回去。这样,就给每个过滤器提供了根据需要处理响应对象的机会。过滤器发生作用的时间,在一个REQUEST到达SERVLET之前预处理REQUEST,也可以在离开SERVLET时处理RESPONSE。(2)过滤器的实现方式实现一个过滤器需要经过3个步骤1编写过滤器的实现类2然后再WEBXML文件中声明该过滤器3最后把过滤器与应用程序一起打包并部署它。在最新版的SERVLET规范中,只要求过滤器的实现类实现FILTER中的INIT和DOFILTER方法,这两个方法的功能如下1INIT这个方法在容器实例化过滤器时被调用,它主要设计用于使过滤器为处理做准备。容器为这个方法传递了一个FILTERCONFIG,其中包含着配置信息。2DOFILTER与SERVLET拥有一个SERVICE方法来处理请求一样,过滤器拥有单个用于处理请求和响应的方法DOFILTER方法,它接受3个参数SERVLETREQUEST、SERVLETRESPONSERESPONSE、FILTERCHAIN。其中FILTERCHAIN对于正确的过滤操作至关重要。所以再该方法中,必须调用FILTERCHAIN的DOFILTER方法,除非该方法用来拦截以后的下游处理。另外过滤器的一个实例可以同时服务与多个请求,意味着任何共享的变量都必须通过同步块来访问12。下面是本系统中过滤器实现类的代码在本系统的该过滤器实现类的具体代码如下PUBLICCLASSCHARACTERENCODINGFILTERIMPLEMENTSFILTERPRIVATEFILTERCONFIGCONFIGPUBLICVOIDINITFILTERCONFIGCONFIGTHROWSSERVLETEXCEPTIONTHISCONFIGCONFIGPUBLICVOIDDOFILTERSERVLETREQUESTREQUEST,SERVLETRESPONSERESPONSE,FILTERCHAINCHAINTHROWSIOEXCEPTION,SERVLETEXCEPTIONREQUESTSETCHARACTERENCODING“GBK“/传递给下一个FILTER或SERVLETCHAINDOFILTERREQUEST,RESPONSE112业务层出现的技术难题问题的关键字事务,SESSION事务业务层主要负责处理业务逻辑,里面有许多与系统业务相关的业务逻辑处理类。而每次处理完业务后,我们都将会把处理的结果持久化到数据库中,而每次所进行的数据库操作我们可以看成一个事务,所谓事务,就是为了完成一个工作单元执行的一系列操作,这些操作是相互依赖的,要么全部执行成功,要么全部失败,它是一种原子操作,事务的引入是为了确保数据的一致性。SESSIONSESSION是HIBERNATE中的一个最重要的接口,表示应用程序与数据持久层之间交互操作的一个单线程对象,它的生命周期很短。其隐藏了JDBC连接,同时也是HIBERNATE的事务工厂,负责生成事务对象13。1121事务的提交1提出问题将事务的提交放在DAO层,由于事务是一个原子操作,一个或多个操作将作为一个事务。由于DAO层是与数据库交互的层,各个DAO的实现类都提供有对数据库中的表进行操作的方法,如果对组成事务的每一个操作,每执行完一次就马上提交,就很有可能违反所有操作要同时成功或失败的原则。2分析问题之所以会违反上述的原则,是因为,如果在DAO层提交事务,无法保证所有的操作都成功执行,这样将操作分开提交,破坏了它们之间的依赖性,将有可能出现其中一个或多个操作失败,而另一些操作执行成功,并提交事务的情况,结果将导致数据的不一致性。3解决问题将事务放在业务层提交,即当所有的操作都执行成功后,才提交事务,否则将事务回滚,记录回到初始状态。这样才能保证数据的一致性。1122SESSION线程安全1提出问题SESSION是单线程的,故它是线程不安全的对象,当多个线程访问同一个SESSION时,会出现数据存取逻辑的混乱。2分析问题当SESSION在SERVICE层与DAO层之间进行传递的时候,难免会出现传递的SESSION并不是对应于当前线程的SESSION,这样将可能对还未提交的事务提前提交,而应该提交的事务并没有得到及时的提交,从而无法最终将对象持久化到数据库中,并且提交别的SESSION事务也没有意义。3解决问题将SESSION与当前线程绑定,以保证一线程一SESSION,最终正确提交事务。在本系统中,我通过调用HIBERNATEUTIL工具类的GETCURRENTSESSION方法获得当前线程的SESSION,而该SESSION实际是通过THREADLOCAL类中的GET方法获得。同时将SESSION与它开启的事务通过一个TRANSACTIONMANAGERMAPIMPL类中的一个MAP类型的集合进行关联。系统的实现代码如下HIBERNATEUTIL类中的GETCURRENTSESSION方法PRIVATESTATICTHREADLOCALLOCALNEWTHREADLOCALPUBLICSTATICSESSIONGETCURRENTSESSIONSESSIONSSESSIONLOCALGETIFSNULL/如果不存在该SESSION,则创建一个并与该线程绑定SSFOPENSESSIONLOCALSETSRETURNSSERVICE层SERVICE类的部分代码PRIVATECUSTOMERDAODAOCUSTOMERDAODAOFACTORYGETDAOCUSTOMERDAOCLASSPRIVATETRANSACTIONMANAGERMAPIMPLTMNEWTRANSACTIONMANAGERMAPIMPLSESSIONTMBEGIN/调用DAO层的实现类中的INSERT方法将数据插入数据库中DAOINSERTC,SESSIONTMCOMMITSESSION提交事务TRANSACTIONMANAGERMAPIMPL类中的两个重要方法BEGIN,COMMITSESSIONSESSIONPUBLICSESSIONBEGINSESSIONSESSIONHIBERNATEUTILGETCURRENTSESSIONTRANSACTIONTRANSACTIONSESSIONBEGINTRANSACTIONMAPPUTSESSION,TRANSACTIONRETURNSESSIONPUBLICSESSIONCOMMITSESSIONSESSIONTRANSACTIONTRANSACTIONMAPGETSESSIONTRANSACTIONCOMMITRETURNSESSION113持久层出现的技术难题由于本系统在数据库中建立的表都是遵循第三范式的,即表与表之间存在关联关系,经常会通过连接查询来查找表中的信息。故通常关联的两张表就会通过主外键关联在一起,而在对其中一张表进行增删改操作时,由于它与其他表存在关联关系,就不得不考虑到正在进行的操作是否会影响到另一张表,由此就问题丛生起来。问题的关键字CASCADEINVERSECASCADE对当前执行的操作进行级联操作。INVERSEINVERSE是反转的意思,指的是关联关系的被控端。如果INVERSE”TURE”,即当前对象是关联关系的被控方,反之,则是主控方。1131在HIBERNATE的映射文件中对于CASCADE属性的设置1提出问题如上所说,在关系型数据库中,表并不是独立存在的,表与表之间通常存在关联关系,并通过主外键将两表关联起来,那么当一个表中的某条记录发生变化后,就会影响到另一张表的某一条与之关联的记录。下面就系统中的菜肴表和菜肴类型表进行问题的具体描述。系统中的菜肴表与菜肴类型表之间存在关联关系,菜肴表通过菜肴类型ID字段与菜肴类型中的ID字段相关联,其中菜肴类型ID字段是菜肴表中的外键,菜肴类型表中的ID字段是菜肴表的主键,它们之间是多对一的关系。外键字段的值受主键字段约束,即外键字段的值是对主键字段中的值的引用。如果我们向子表外键所在的表中插入一条记录,而该记录的外键值在父表主键所在的表的主键中没有与之匹配的值,那么数据库将认为这是非法操作,并提示出错说在父表中找不到与之匹配的主键。另外,如果删除父表中的某条记录,而在子表中还存在与之关联的记录,此时数据库也会报错,说子表中仍然找得到与父表主键匹配的外键值。所有这些非法操作将导致操作无法正常的进行,即使正常进行也会使表中出现一些无意义的记录。2分析问题数据库之所以会提示上述的错误,是因为它考虑到这些操作的最终结果会导致一些无意义的记录的出现,因为外键使受主键约束的,它不可能脱离主键而独立存在,它的值是对主键的值的引用,故不能平白无故地插入一个在父表的主键中没有出现过的值,这将违反完整性约束。另外,如果先删除父表中的某条记录,而与之关联的记录在子表中还存在,那么结果将导致子表中的这条记录变得无意义。3解决问题综上所述,我们应该按照以下步骤来插入和删除记录,先插父表后插子表,先删子表后删父表,这样就不会出现上述的错误提示了,并能正确地完成插入删除操作。可是每次插入删除,都要手动执行两次操作,毕竟比较麻烦,故CASCADE关键字诞生了,我们在HIBERNATE的映射文件中,设置CASCADE属性为CASCADE”ALL”,即对所有的操作,SAVE,UPDATE,DELETE都采取级联操作,就是在对父表进行插入删除操作时HIBERNATE都会自动对子表进行相应的操作,这样就保证了数据的一致和完整性。代码如下/对表中的每条记录的所有操作都采取级联操作/定义多端的外键为CUISINETYPE_ID,它受一端的主键约束。/集合中的元素类型,以及集合中的对象与当前对象的关联关系最后,CASCADE属性必须设置在一的那端,因为外键受约束于父端的主键。1132在HIBERNATE的映射文件中对于INVERSE属性的设置1提出问题系统中的持久化对象间的关联关系必须靠它们其中一方来维护,并且通过HIBERNATE映射文件中的INVERSE属性反应出来,一般情况下,INVERSE属性值默认为FALSE,指明该端为关联关系的主控端。但是如果在关联关系为一对多的两个对象中,将一的那端设为关联关系的主控方,当执行插入和删除操作时,会影响到执行的效率。2分析问题由于一端被设置为关联关系的维护方,那么每次执行插入操作时,都会先向多的那一端插入记录,再插入一端的记录,但是由于多端的外键受约束于一端的主键,若先生成多端的记录的话,会因为不知道一端的主键,而暂时使外键字段为NULL,当一端记录插入后,才能将多端的外键字段值更新,此时一个简单的插入操作就要通过两步来完成,其中一个操作就是对外键字段的更新操作。当一端数据发生更新时,由于它是关联关系的维护放,所以它要对集合中的每个对象都进行更新。这样每次更新时都会执行N1次操作,N为集合中对象的个数。3解决问题在一端将INVERSE属性设为INVERSE”TRUE”,在生成多端记录时,只用执行一条插入语句。在执行更新操作时,由于是关联关系是由多端维护的,因此多端只用先更新它,然后再更新一端即可。这样只需执行2次操作,比上述的N1次操作的效率要高很多。第十二章开发的心得体会与收获经过为期1个来月的准备,以及紧接着的将近2个月的系统开发,我收获了许多。由于本系统采用的是目前最流行的WEB应用开发框架STRUTSPOJOHIBERNAT技术,而且难

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论