(应用数学专业论文)网络订餐系统的设计与实现.pdf_第1页
(应用数学专业论文)网络订餐系统的设计与实现.pdf_第2页
(应用数学专业论文)网络订餐系统的设计与实现.pdf_第3页
(应用数学专业论文)网络订餐系统的设计与实现.pdf_第4页
(应用数学专业论文)网络订餐系统的设计与实现.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

网络订餐系统的设计与实现 摘要 随着网络技术的不断发展。人们对于网络有了越来越多的要 求e b a 弘阿里巴巴,淘宝的出现,让电子商务重现曙光,g o o g l e ,b a i d u 的 出现,让人们通过网络进行信息检索,获取到有效信息的途径更加丰 富。 当写字楼群的白领们工作了整个上午后。享用丰盛的午餐成为 了一种基本需求。而目前已经存在的网上订餐系统都是为用户提供 有限的菜品资源,用户的选择非常有限。针对目前网络订餐门户网 站的这种局限性,我们提出并设计实现了这个网络订餐系统。 本论文从根本上讨论了系统的设计思路,基本模块,以及最后完 成的情况,最终展示了一个实用的,面向大众的网络订餐系统系统是 在l i n l l x 平台上,采用s t m t s 架构,采用j s p ,j a v a 语言进行开发。 本论文共分5 章。第一章论述了网络订餐系统出现的背景。并阐 述了当前网络订餐系统的发展现状与趋势。第二、三章分别论述了 网络订餐系统结构和基本工作流程,说明了搜索引擎技术的发展现 状,提出在网络订餐系统中引入搜索引擎的必要性;以及介绍了设计 开发的平台选择和使用的关键技术。第四章详细论述了网络订餐系 统的设计和实现。第五章为论文总结和后续研究工作的建议。 关键词:网络订餐j 越厂a s t r u t sn u t c h t h ed e s i g na n dr e a l i z a n o no f t h es y s t e mf o ro r d e r 【n gm e a l 呵n e t w o r k a b s t r a c t 舢o n gw i t ht h ec o n s 诅md c v e l o p m 咖o fn e t 、釉r i ( t e c l l n o l o g 弘t h e n e t w o r kh 私b e e nu s e db yi n c r c a s i n gm l n l b c ro fp e o p l c ,锄dt h e yh a v e m o r e r 。q u i r c m e n t o ft h en e t 、) l ,o r k w i t ht h e d c v e l o p m e n t o f t a o b a o ,a l i b a b aa n de b a y 也ee c o 删n e r c es t 印i n t oan e wc c n t i l 珥a s t h er 嚣u l to f 廿1 ea p p e a m c eo fb a i d u ,t a o b a 0 ,a l i b a b a 姐de b 觋w - c h a v em o r em 戗h o d st 0g e ti n f 0 皿a t i o nf 硒mn e t w o r k i fw e c o u n t e r e das i t u a t i o n ,p e o p l eh a v ew o r l 【e di no 伍c cw h o l e m o m i n g ,i nt h el u n c ht i m e ,t 1 1 e ya l lw 锄tt oh a v ead e l i c i o l l sl u c h b m n o ww es t i l lh a v e n tg o tam e t h o dt 0s r c h 锄do r d e fm e a l 舶m n e t w o f kl i k eb a i d ua n dg o o g l e ,t h a tm e 姐sw ec o u l dd e v e l 叩a w e b s i t e ,i nw h i c ht h eu s e rw h og e ti n t oi tc o u l ds e a r c ht h ef o o dw h a t t h e yw a m t 0e a t 甜1 ds e n dm c i ro r d e rf 0 珈略t ou s t h i e nw ew i l ld e l i v e r t h ef o o dt h e yo r d e r e dt oo u rc u s t o m e f s t h ep a p c rd e s 嘶b et h en e e d so f m ew 曲s i t e ,m ed e s 咖o f m i s w e b s i t c ,a n df i l l a l l yf i n i s hm ej o bo fd e v e l o p i n gaw c b s i t ea b o u to r d c r m e a l 丘d mn e 铆o r k 肌es y s t 锄i sb u i l to nl i n u x ,u s 岫j a v aj s pa s d e v e l o p i n gl a l l g u a g e ,s t n l t sa st l l ed e v e l o p m e n tf h m e w o r k t h ep 印e ri n c l u d e s5c h a p t e r s c h a p t c rl :t h ei m p o r to f m e s y s t e m w ed e v e l o p e d c h a p e r 2 ,3 :t h e 劬m e w o r k 锄dt h ep f i n c i p l eo ft h e w e b s i t e ;i ta i s os h o w st h ed e v e l o p m e mo ft h es e a r c he n g i r l et e c h n o l o g y a 1 1 dm e ng i v et h er e a s o nw h yw ei m p o r cm es e 觚c he n g i n ei nt h es y s t e m ; a n dt h ed e s i 蛐a n dd e v e l 叩m e n to f k c y t e c l l n o l o g i e sa n dp l a t f - o 加st o c h o o s e c h a p t e r4 :h o wt oi m p l e m e n tt h es y s e m c h a p t e r5 :s u m m a 巧 a n ds o m ea d v j c 既 k e yw o r d s :n e t w o r kf o o do r d c rj a v as 缸u t sn u t c h 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文 中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学 或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究 所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处, 本人签名:聋始。 本人承担一切相关责任。 日期:塞盟:i :q 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定, 即:研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校 有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被 查阅和借阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、 缩印或其它复制手段保存、汇编学位论文。( 保密的学位论文在解密后遵守此 规定) 保密论文注释:本学位论文属于保密在年解密后适用本授权书。非保密 论文注释: 本人签 导师签 北京邮电大学硕士学位论文 第一章绪论 1 1 网络订餐系统出现的背景 在电视等媒体出现以前,人们获取信息的主要方式是通过阅读书籍报刊等 印刷媒体,有了电视以后人们获取信息的方式更多是通过看电视,因为电视能提 供图象、声音等更丰富的信息,并能提供更快捷的服务。而现在人们能更有效的 通过互联网来获取信息,是因为互联网能提供更加及时、大量的信息资源。互联 网环境给我们带来的影响是广泛而深刻的,使信息资源的获取扩展到整个互连网 络,所以可提供服务的信息资源极为丰富 我们对于网络的上电子商务开展状况进行了广泛的调研,并展开问卷调查后 得出结论,设计开发一个完善的网络订餐系统成为了一个极具光明前景的,可以加 以实施的课题。 1 2 网络订餐系统的发展与趋势 目前网络上的丽华快餐,正午的盘子,可以算作网络订餐的雏形,大众也已经 接纳了这种便捷的订餐方式他们具有一个共同的特点,自己拥有自己的厨房,有 自己的送餐体系,各自为战。 随着百度,g o o 百e 的兴起,我们也开始采用搜索引擎去搜索一些我们感兴趣的 信息,这带给了我们对网络订餐系统更深层次的思考,为什么我们不尝试着去开发 一个对于各个餐厅的菜品的订餐搜索系统,并帮助餐厅进行递送,这就是我们即将 开发的网络订餐系统的出发点与想要达到的目标。 第2 页 北京邮电大学硕士学位论文 第二章系统架构与原理分析 2 1 网络订餐系统架构 网络订餐系统是一个大型的网络订餐门户系统,最终是要提供个平台,餐 厅可以自由加盟,并且发布自己的菜品,特价信息:用户登录我们提供的平台自由 选择感兴趣的菜品进行定购,最后由我们的配送人员将用户定购的菜品送至客户 手中这么做的目的可让订餐者与餐厅进行互动,足不出户,订购自己喜爱的菜 品。餐厅也可以在网络上查看订单,根据自己的营销策略定价,进行宣传,扩大 影响,增加销量。具体的细节见图2 - 1 。 图2 1 网络订餐系统结构图 网站构建主体分为三个部分,订餐用户使用模块,餐厅管理模块,网络公司 管理模块。见图2 2 。 图2 - 2 网络订餐系统主体图 第3 页 北京邮电大学硕士学位论文 2 2 系统工作流程分析 网络订餐系统客户主要的工作流程如图2 3 所示: 图2 3 订餐系统用户工作流程示意图 1 1 根据帐号密码登录网站 用户来到网站后,首先根据帐号密码登录网站,登录后,可以查询自己的相关 历史信息,也可以对相应的订餐信息进行更改。 2 ) 对自己感兴趣的菜品进行搜索 进入网站后,用户可以搜索相应的菜品,这个阶段,用户可以直接查找相应的 餐馆或者搜索相应的菜品,进行有比较的选择( 价格,口味等等) 。 3 ) 确定菜品 “用户”输入关键词搜索后,到数据库中进行相应的搜索。再选中相应的菜 品加入购物篮。 4 ) 确认订单 用户确认订单无误后,提交订单,完成预定的流程,进入我们工作人员的送餐 流程。 网络订餐系统餐厅主要的工作流程如图2 _ 4 所示: 第4 页 北京邮电大学硕士学位论文 图2 - 4 订餐系统餐厅工作流程示意图 1 ) 根据帐号密码登录网站 餐厅用户来到网站后,首先根据帐号密码登录网站。 2 ) 录入菜品信息 进入网站后。可以查询自己的相关历史信息,也可以对相应的餐厅基本信息 和菜品信息进行更改或录入。 2 3 搜索引擎技术的发展与在网络订餐系统中的应用 2 3 1 搜索引擎技术的发展 目前搜索引擎提供的导航服务已经成为互联网上非常重要的网络服务,搜索 引擎站点也被美誉为“网络门户”。搜索引擎技术因而成为计算机工业界和学术 界争相研究、开发的对象。 伴随着w w w 应用的发展,搜索引擎的发展可大概分成四代: 第一代搜索引擎指主要依靠人工分拣的分类目录搜索。 第二代搜索引擎则指以超链接分析为基础的机器抓取技术为基础。出现于 1 9 9 4 年前后,以 j t a v i s 协、y a h 0 0 和i i l f o s o e k 为代表,搜索结果的好坏往往用 反馈结果的数量来衡量,也就是说,第一代搜索引擎“求全”。然而,研究表明, 现在的搜索引擎性能并不是想象中的那么优秀,在全球1 1 个主要的搜索引擎中, 搜索引擎仅能搜索到国际互联网上全部页面的1 6 ,甚至更低,造成这种情况的 原因,主要是因为这些搜索引擎没有及时更新他们的资料。 1 9 9 8 年,以g o o 皿e 和d 油c t h i t 为代表的第三代搜索引擎出现在互联网上, 第5 页 北京邮电大学硕士学位论文 这些引擎的主要特点是提高了查准率,它是检索技术的提升 目前正在发展的第四代搜索引擎采用完善的主题搜索引擎,由于主题搜索运 用了人工分类以及特征提取等智能化策略,因此它比上面提到的前三代的搜索引 擎将更加有效和准确。 2 3 2 搜索引擎技术在网络订餐系统中的应用 目前在搜索引擎领域的学术研究与商业开发非常活跃,各大搜索引擎公司和 科研院所都在投巨资研制搜索引擎系统,同时也不断地涌现出新的具有鲜明特色 的搜索引擎产品,搜索引擎已经成为信息领域的产业之一。将搜索引擎技术应用 于网络订餐系统,建设具有我们自己特色的订餐系统成为一个独创性的创新点。 第6 页 北京邮电大学硕:仁学位论文 第三章j a v a 开发平台和系统关键技术 3 1 技术平台分析 3 1 1 j a v a 语言 j a v a 是一种跨平台,适合于分布式计算环境的面向对象编程语言。因为j a v a 语言具有很多特性,如面向对象、平台无关、分布式、多线程、可靠和安全性、 可收集无用的存储单元、可扩展性好等特性,所以我们在系统开发中采用j a v a 平台。 1 ) 面向对象 所有面向对象编程语言都支持三个概念:封装、多态性和继承,j a v a 也不例 外。现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象 的数据,行为表示对象的方法( 其作用是处理数据或同外界交互) 。所谓封装, 就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。可以说,对 象是支持封装的手段,是封装的基本单位。j a v a 语言的封装性较强,因为j a v a 无全程变量,无主函数,在j a v a 中绝大部分成员是对象,只有简单的数字类型、 字符类型和布尔类型除外。而对于这些类型,j a v a 也提供了相应的对象类型以便 与其他对象交互操作。 多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实 现方法”表示。例如,计算机中的堆栈可以存储各种格式的数据,包括整型,浮 点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据 类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。 继承是指一个对象直接使用另一对象的属性和方法。例如,若把汽车看成一 个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽 车的特性,因此,汽车是它们的“父类”,而这些子实体则是汽车的“子类”。j a v a 中的类按层次结构组织,子类可以继承父类的属性和方法。 2 ) 平台无关性 j a v a 主要靠j a v a 虚拟机( j v m ) 在目标码级实现平台无关性。j 、,m 是一种 抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的 栈、寄存器组等。但m 通常是在软件上而不是在硬件上实现。j v m 是j a v a 平台无关的基础,在j 订上,有一个j a v a 解释器用来解释j a v a 编译器编译后的 程序。j a v a 编程人员在编写完软件后,通过j a v a 编译器将j a v a 源程序编译为j v m 第7 页 北京邮电大学硕士学位论文 的字节代码。任何一台机器只要配备了j a v a 解释器,就可以运行这个程序,而 不管这种字节码是在何种平台上生成的( 过程如图3 1 所示) 。另外,j a v a 采用 的是基于i e e e 标准的数据类型。通过j v m 保证数据类型的一致性,也确保了 j a v a 的平台无关性。 图3 一lj a v a 程序与运行平台无关 3 ) 分布式 分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同 主机上,操作分布是指把一个计算分散到不同主机上处理。j a v a 支持w w w 客 户机服务器计算模式,因此,它支持这两种分布性。对于前者,j a v a 提供了一 个叫作u r l 的对象,利用这个对象,你可以打开并访问具有相同u r l 地址上的 对象,访问方式与访问本地文件系统相同。对于后者,j a v a 的a p p l e t 小程序可以 从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。 j a v a 提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方 便地实现j a v a 的分布式特性 4 ) 多线程 线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的 可并发执行的单位。 j a v a 在两方面支持多线程。一方面,j a v a 环境本身就是多线程的。若干个系 统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,j a v a 语言内置多线程控制,可以大大简化多线程应用程序开发。j a v a 提供了一个类 1 1 l r e a d ,由它负责启动运行,终止线程,并可检查线程状态。j a v a 的线程还包括 一组同步原语。这些原语负责对线程实行并发控制。利用j a v a 的多线程编程接 口,开发人员可以方便地写出支持多线程的应用程序,提高程序执行效率。必须 注意的是,j a v a 的多线程支持在一定程度上受运行时支持平台的限制。例如,如 果操作系统本身不支持多线程,j a v a 的多线程特性可能就表现不出来。 5 ) j a v a 是可收集无用的存储单元的 用c 及c + + 写软件的编程人员必须仔细跟踪所用的内存块。当一个块不再 第8 页 北京邮电大学硕士学位论文 使用时,他们务必让程序释放它,才能再用。在大的项目中,这可能很困难,并 往往成为出错和内存不足的根源。 在j a v a 的情况下,编程人员不必为内存管理操心。j a v a 系统有一个叫做“无 用单元收集器”的内置程序,它能自动扫描内存,并自动释放那些不再使用的内 存块。 6 ) 可靠性和安全性 首先,j a v a 是强类型的语言,要求显式的方法声明,这保证了编译器可以发 现方法调用错误,保证程序更加可靠;其次,ja _ v a 不支持指针,这杜绝了内存的 非法访问;第三,j a v a 的自动单元收集防止了内存丢失等动态内存分配导致的问 题;第四,j a v a 解释器运行时实施检查,可以发现数组和字符串访问的越界,最 后,j a v a 提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样 可以简化错误处理任务便于恢复。 当j a v a 字节码进入解释器时,首先必须经过字节码校验器的检查,然后, j a v a 解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装 载到单独的内存区域,避免应用程序之间相互干扰破坏。上述几种机制结合起来, 使得j a v a 成为安全的编程语言。 3 1 2j s p ( j a v as e r v e rp a g e s ) j s p 页面由h 聊l 代码和嵌入其中的j a v a 代码所组成。服务器在页面被客 户端所请求以后对这些j a v a 代码进行处理,然后将生成的m m l 页面返回给客 户端的浏览器。您可以使用平常得心应手的工具并按照平常的方式来书写m m l 语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“ ”开始 并以“岭”结束。 j s p 文件以“j s p ”为扩展名,它可以放置到任何放置普通w e b 页面的路径 下。尽管j s p 文件看起来更象是h t m l 文件而不是s e r v l e t 文件,但是事实上, 它恰恰将转换为s e r v l c t 文件,其中的静态h 1 m l 仅仅用来输出s e i e t 服务方法 返回的信息。如果j s p p a g 部已经被转换为s e l e t 且s e r v l c t 被编译进而被装载 ( 在第一次被r c q u c s t 时) ,当您再次r 明u e s t 此j s p 页面时,将察觉不到一瞬 的延迟。也请留意这个现象,一些w 曲s e r v 锄允许您为它定义别名,从而,好 象一个u l 也是指向一个h 1 m l ,但事实上它指向的是一个s e r v l e t 或是j s p p a g 鼯。 构造一个j s pp a g e ,除了可内嵌的规则的h 1 m l ,还有三类主要的j s p 元素: 脚本元素( s c f i p t i n ge l e m t ) ,指令( d i r 鳅i v e ) ,动作( a 确o n ) 。使用脚本元 素您可以定义最终转换为s c r v l e t 的一部分j ,a 代码,指令语法使您可以控制 第9 页 北京邮电大学硕士学位论文 这个s e f v l e t 的整体结构,而动作语法使您可以指定可重用的已有组件,另外, 还可控制j s p 引擎的运行。为了简化脚本元素,您可以在某一段上利用一些预定 义的变量,如r e q u e s t 等。 3 1 3j a v a s e r v l e t s e n ,l e t 是一种小型的j a v a 程序,它扩展了w 曲服务器的功能。作为一种服 务器端的应用,当被请求时开始执行,这和c g ip e f l 脚本很相似。s 训e t 提供 的功能大多与j s p 类似,不过实现的方式不同。j s p 通常是大多数m m l 代码中 嵌入少量的j a v a 代码,而s e r v l c t s 全部由j a v a 写成并且生成h t m l 。 s e r v l c t 是j a v a 技术对c g i 编程的回答。s e l e t 程序在服务器端运行,动态 地生成w 曲页面。与传统的c g i 和许多其他类似c g i 的技术相比,j a v as e n r l e t 具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资 等。 1 ) 高效 在传统的c g i 中,每个请求都要启动一个新的进程,如果c g i 程序本身的 执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在 s e r v i e t 中,每个请求由一个轻量级的j a v a 线程处理( 而不是重量级的操作系统 进程) 。 在传统c g i 中,如果有n 个并发的对同一c g i 程序的请求,则该c g i 程序 的代码在内存中重复装载了n 次;而对于s e f v l e t ,处理请求的是n 个线程,只 需要一份s e r v l c t 类代码。在性能优化方面,s e r v l c t 也比c g i 有着更多的选择, 比如缓冲以前的计算结果,保持数据库连接的活动,等等。 2 ) 方便 s e r v l c t 提供了大量的实用工具例程,例如自动地解析和解码 r 瑚l 表单数 据、读取和设置h t r p 头、处理c 0 0 村e 、跟踪会话状态等。 3 1 功能强大 在s e r v l 或中,许多使用传统c g i 程序很难完成的任务都可以轻松地完成。 例如,s e f v i e t 能够直接和w 曲服务器交互,而普通的c g i 程序不能。s e n d e t 还 能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。 4 ) 可移植性好 s e l e t 用j a v a 编写,s e f v l e t a p i 具有完善的标准。例如,为w 曲l 0 垂c 写的 s e l e t 几乎不需任何改动即可移植到a p a c h e 、m i c r o ni i s 等其它符合s e r v l c t 规范的应用服务器上。 如果某个类要成为s e r v l e t ,则它应该从h t t p s e r v l c t 继承,根据数据是通过 第l o 页 北京邮电大学硕士学位论文 g e t 还是p o s t 发送,覆盖d o g e t 、d 0 p o s t 方法之一或全部。d o g e t 和d o p o s t 方 法都有两个参数,分别为h t t p s e l e t r e q u e s t 类型和h t t p s e r v l e t r e s p o 船e 类型。 h t f p s e r v l e t r e q u c s t 提供访问有关请求的信息的方法,例如表单数据、h t t p 请求 头等等。h t c p s e n ,l e t r e s p o n 除了提供用于指定h t l 甲应答状态( 2 0 0 ,4 0 4 等) 、 应答头( c o n t e n t - 1 卸e ,s 办c o o l ( i e 等) 的方法之外,最重要的是它提供了一个 用于向客户端发送数据的p r i n t w 矗t e f 。对于简单的s e r v l e t 来说,它的大部分工 作是通过p r i i l t l n 语句生成向客户端发送的页面。 注意d o g c t 和d o p o s t 抛出两个异常,因此你必须在声明中包含它们。另外, 你还必须导入j a v a i o 包( 要用到p r i m w m 盱等类) 、j a v a 】【s e l e t 包( 要用到 h t t p s e r v l e t 等类) 以及j a v a ) 【s e r v l e t _ h t t p 包( 要用到h t t p s e f v l e t r 。q u e s t 类和 h t t p s e r v l e t l l e s p 类) 。 最后,d o g c t 和d 0 p o s t 这两个方法是由s e f v i c e 方法调用的,有时你可能需 要直接覆盖s e r v i c e 方法来实现所需要的功能,比如s e l e t 要处理g e t 和p o s t 两种请求时。 3 1 4d a t l s o u r c c ( 数据库缓冲池技术) 个数据库缓冲池指的是缓存于内存空间中的数据库物理连接,这些数据库 连接可以被重复使用。数据库缓冲池对于提高j a v a 数据库应用程序的性能十分 重要,尤其是当这个j a v a 数据库应用程序运行于中间层服务器环境时。 数据缓冲池存在于中间层服务器环境当中,可以被不同的j a v a 应用程序所 调用。j “强s q l r ( w s e t 包添加了对缓冲数据源的支持,即可以将缓冲池缓冲的 数据库连接看作是一个是实实在在的数据源服务来使用。r o w s c t 包提供了好几 个接口用于处理数据库缓冲池,主要的接口有: l 、d a t a s o u r 接口:d 眦l s o u r 接口的实例对象代表了存在于中间层服务器中 的缓冲数据源服务。使用它可以返还数据库缓冲池中现存的数据库连接, d a t a s o u d 接口的实例对象实际上是某个d i 服务的提供者,在使用它之前, 该扑i d i 服务对象必须先在中间层服务器环境中注册,并且和某个服务名绑定在 一起,然后它才能被别的j a v a 应用程序调用。 2 、c o 衄耐i o n p 0 0 l d a t a s o u r 接口:该接口可以用于创建一个被缓冲于缓冲池 的数据库物理连接,它有可能会被d a t a s o u “七接口的实例对象调用。 3 、p 0 0 l c d c o 衄e c t i 接口:该接口代表被缓冲的数据库连接,它定义了一个 g e t c o 曲e c t i o n 0 方法使用这个方法可以返回j a v a s q l c 0 n c t i o n 接口的实例对象。 如何使用r o w s e t 包定义的类和接口操作数据库缓冲池,下面的j a v a 代码段提 供了一个简单的不完整的例子。 第l i 页 北京邮电大学硕士学位论文 c o n t e x tc 恢= n e wh l i 缸a l 伽e x t 【) ; d a t a s o u r c ed s = a 协s o l ) 嗽1 0 0 k u p ( j d b c ,e m p l o y d b ”) ; ,f i r s tg c tac o 仰e c t i o l lc 伽n e c t i o np o o l i n gi sd o n e i n t 锄a l l yb y t l l ed 北i s o i o b j e c l c o n n 鳅i o nc o n = d s g c t c o 蚴c c d o n ( j d b c ,e b d a t a b a s e ”s a ”“什) ; d oa l l t h e w o r k 舔as i n 酉e 仃a n s a c t i o n ( o 埘伽i a l ) c o n s e t a u t “珀i n n l i “f 砒s c ) ; t h ea c t i l a lw o i l 【( q u e f i 韶缸dl l p d a t 髑) w o u l d 窘oh e 聘 w r o 出i s d o n e l l s i n gs t a n d a i dj d b c c o d e 鹪d e 丘n e d i n t l ” ,s t o f t l l ej d b c a p i ,c o 】m i tt h e 仃a n s a d i o n c o n c c 咀m l i t o ; c l o m c o o c c t i o l l 他s 咖硼雌m e 瑚d e d y i n g p h y s i c a l d 嗣曲b 勰e c o 衄鳅i o n t o i h e p l c o n d o s e 0 ; 上面的j s p 代码段的运行机理如下: 1 ) 首先程序代码获取初始化的j n d i 环境并且调用c o n t e x t 1 0 删方法从孙i d i 服务提供者那里获一个d a t a s o u r c c 对象。 2 ) 中间层j n d l 服务提供者返回一个d a t a s o u r c e 对象给当前的j a v a 应用程序 这个d 咖s o u r 对象代表了中间层服务上现存的缓冲数据源。 3 ) 应用程序调用d a t a s o u r 对象的g e t c 彻n t i 伽o 方法。 4 ) 当d a t a s o u r 对象的g e 6 伽0 方法被调用时,中间层服务器将查询数 据库连接缓冲池中有没有p 0 0 l e d c c 衄e c t i 接口的实例对象,这个 p o o l e d c o 衄o c t i 对象将被用于与数据库建立物理上的数据库连接。 5 ) 如果在缓冲池中命中了一个p o o l c d c 0 0 c t i o n 对象,那么连接缓冲池将简单 地更新内部的缓冲连接队列并将该p 0 0 l c d c 伽n 硎对象返回,如果在缓冲池 内没有找到现成的p o o l e d c c 恤蒯o n 对象,那么c o n c t i o i l p o o l d a t a s o u r 接口 将会被用来产生一个新的p 0 0 1 e d c o 衄o c t i 对象并将它返回以便应用程序使用。 6 ) 中间层服务器调用p 0 0 l e d c c l n e c c i 对象的g 酬洳m 。c t i o 方法以便返还一 个j a v a s q l c n e c 虹o n 对象给当前的j a v a 应用程序。 7 ) 当中间层服务器调用p o o l c d c o 衄e c t i o n 对象的g e t c o n c t i o 方法时,j d b c 数据库驱动程序将会创建一个c 彻n e c t i o n 对象并且把它返回中间层服务器。 8 ) 中间层服务器将c o 衄吐o n 对象返回给应用程序,j a v a 应用程序可以认为这 个c 0 n n 鳅i 伽对象是一个普通的j d b cc o 衄e c t i o n 对象,使用它可以和数据库 第1 2 页 北京邮电大学硕士学位论文 建立事实上的连接与数据库引擎产生交互操作。 9 ) 当应用程序不需要使用c o n n e c t i o n 对象时,可以调用c o n n e c t i o n 接口的 d o s c ( ) 方法。请注意这种情况下c l o s e ( ) 方法并没有关闭事实上的数据库连接,仅 仅是释放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据 库连接缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。 3 1 5m v c 开发模式 采用基于m v c 模式的w 曲应用最经典框架s t r l 吐s 。s 衄l 忸是一个为开发 基于模型( m o d d ) 一视图( e w ) 一控制器( c o r l t r o l l 哪( m v c ) 模式的应用架构的开 源框架,是利用j a v as e l e t 和j s p 构建w 曲应用的一项非常有用的技术。s t n l t s 能充分满足应用开发的需求,简单易用,敏捷迅速。 s 衄l 忸是基于m o d e l2 之上的,而m o d e l2 是经典的m v c ( 模型一视图一控 制器) 模型的w 曲应用变体,这个改变主要是由于网络应用的特性一 r r r p 协议 的无状态性引起的。m o d d2 的目的和m v c 一样,也是利用控制器来分离模型 和视图,达到一种层问松散耦合的效果,提高系统灵活性、复用性和可维护性。 在多数情况下,你可以将m o d d2 与m v c 等同起来。 图3 - 2 表示一个基于j a v a 技术的典型网络应用,从中可以看出m 0 d d2 中的 各个部分是如何对应于j a v a 中各种现有技术的。 图3 2 典型网络应用图 第1 3 页 北京邮电大学硕士学位论文 在利用m 0 d d2 之前,我们是把所有的表示逻辑和业务逻辑都集中在起 ( 比如大杂烩似的j s p ) ,有时也称这种应用模式为m 0 d d1 ,m o d d1 的主要缺 点就是紧耦合,复用性差以及维护成本高。 3 1 5 2s 扭l t s1 1 和m o d e l2 既然咖t s1 1 是基于m o d d2 之上,那它的底层机制也就是m v c ,下面是 s 机地1 1 中的m v c 实现示意图: 图3 3 m v c 实现示意图 图解说明:其中不同颜色代表m v c 的不同部分: 红色( 控制器) 、紫色( 模型) 和绿色( 视图) 首先,控制器( a 砸o n s c n d 髓) 进行初始化工作,读取配置文件 ( s 仃u t s c o n f i 吕x i i l l ) ,为不同的s 仇i t s 模块初始化相应的m o d u l e c o 倘g 对象。比 如配置文件中的a 甜o n 映射定义都保存在a c t i o n ( h 伍g 集合中。相应地有 c o n 仃o l c 矗g 集合、f o m l b e 锄c o 嘶g 集合、f o 刑a r d c 0 i l f i g 集合和 m 锶s a g e r 啪l l r c e s c o n 矗g 集合等。 提示:模块是在咖t s1 1 中新提出的概念,你现在可以简单地把模块看作 是一个子系统,它们共同组成整个应用,同时又各自独立。s 仇i t s1 1 中所有的处 理都是在特定模块环境中进行的。模块的提出主要是为了解决s 血l 协1 o 中单配 置文件的问题。 控制器接收h 1 i 甲请求,并从a c t i o n c o n 丘g 中找出对应于该请求的a c t i o n 子类,如果没有对应的a c t i o n ,控制器直接将请求转发给j s p 或者静态页面。否 则控制器将请求分发至具体a 甜类进行处理。 第t 4 页 北京邮电大学硕士学位论文 在控制器调用具体a c t i o n 的e x e c i l t e 方法之前,a c t i o i l f o 肌对象将利用h t t p 请求中的参数来填充自己( 可选步骤,需要在配置文件中指定) 。具体的 a c t i o i l f o 锄对象应该是a c t i o i l f o 锄的子类对象,它其实就是一个j a v a b e 锄。此 外,还可以在a c t i o l l f o m 类中调用v a l i d a t e 方法来检查请求参数的合法性,并且 可以返回一个包含所有错误信息的a c l i o n e n d r s 对象。如果执行成功,a 硝o l l f o m 自动将这些参数信息以j a v a b e 龇( 一般称之为f 0 衄b c a n ) 的方式保存在s e r v l e t c o m e x t 中,这样它们就可以被其它a c t i o n 对象或者j s p 调用。 s 仃u t s 将这些a c t i o i i f o r i i l 的配置信息都放在f m b e 龃c o n 丘g 集合中,通过 它们s 饥l t s 能够知道针对某个客户请求是否需要创建相应的a c t i o n f o 吼实例。 a c t i o n 很简单,一般只包含一个c x c c l l t e 方法,它负责执行相应的业务逻辑, 如果需要,它也进行相应的数据检查。执行完成之后,返回一个a c t i o l l f o 州a r d 对象,控制器通过该a c t i o i l f o 州a f d 对象来进行转发工作。我们主张将获取数据 和执行业务逻辑的功能放到具体的j a v a b e a i l 当中,而a c t i o n 只负责完成与控制 有关的功能。遵循该原则,所以在上图中我将a c t i 对象归为控制器部分。 提示:其实在s 细t s1 1 中,a c t i o l l m a p p i n g 的作用完全可以由a 硝o n c o n f i g 来替代,只不过由于它是公共a p i 的一部分以及兼容性的问题得以保留。 a c t i o n m a p p i n g 通过继承a c t i o n c o n 她来获得与其一致的功能,你可以等同 地看待它们。同理,其它例如a c t i o i l f o 州a r d 与f o 唧a r d c o 蚰g 的关系也是如此。 下图给出了客户端从发出请求到获得响应整个过程的图解说明。 第1 5 页 北京邮电大学硕士学位论文 3 1 5 3 模块 图3 - 4 客户端从发出请求到获得响应过程图 在实际的应用开发过程中,可能会有些麻烦。因为许多开发人员都可能同时 需要修改配置文件,但是配置文件只能同时被一个人修改,这样肯定会造成一定 程度上的资源争夺,势必会影响开发效率和引起开发人员的抱怨。 在s m i t s1 1 中,为了解决这个并行开发的问题,提出了两种解决方案: 1 、多个配置文件的支持 2 、模块的支持 支持多个配置文件,是指你能够为a c i i o n s e f v l e t 同时指定多个x i n l 配置文件, 文件之间以逗号分隔,比如s 缸l 忸提供的m a i l r d e f 演示例子中就采用该种方法。 o r g a p a c h e g m | 协a c t i a 硎o n s 帕鼬e l 晦d a s s i l i t 巾a 托m 第1 6 页 北京邮电大学硕士学位论文 c o n f i g 册e b i n f s 仃u t s - c o n 矗g x m l , 脚e b i n f s t n l t s c o n 矗争r e 百s 叫i o n 舳l 唧猢v a l u e 1 这种方法可以很好地解决修改冲突的问题,不同的开发人员可以在不同的配 置文件中设置自己的觚i o n 、a c t i o i l f o 姗等等( 当然不是说每个开发人员都需 要自己的配置文件,可以按照系统的功能模块进行划分) 。但是,这里还是存在 一个潜在的问题,就是可能不同的配置文件之间会产生冲突,因为在 a c t i o n s e r v l c t 初始化的时候这几个文件最终还是需要合并到一起的。比如,在 s 缸l t s c o n f i g x m i 中配置了一个名为s u c c 嚣s 的 ,而在 s 虮l 协- c o n 丘g - r c g i s n 锄i o n x i i l l 中也配置了一个同样的 ,那么执行起来就 会产生冲突。 为了彻底解决这种冲突,s 眦s1 1 中引进了模块( m 0 d _ i l l e ) 的概念。一个 模块

温馨提示

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

评论

0/150

提交评论