(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf_第1页
(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf_第2页
(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf_第3页
(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf_第4页
(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf_第5页
已阅读5页,还剩85页未读 继续免费阅读

(计算机应用技术专业论文)基于开源框架的通用代码生成引擎设计与实现.pdf.pdf 免费下载

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

文档简介

摘要 摘要 随着各行业信息化建设的迅速展开,都希望能够快速的构建适合自身业务需 要的信息化系统。j 2 e e 作为一个新型成熟的分布式计算技术,已经广泛应用在很 多领域,其可伸缩性、可扩展性的框架体系为应用系统带来了灵活的选择和实现; 尤其是它的各层架构清晰和跨平台的特性,使得其在信息化建设领域广受欢迎和 推崇。信息化系统的开发不但要解决技术上的难题,同时还需要面对纷繁复杂的 业务需求,这种现状极大的影响了应用系统的成功率。如何帮助开发人员从烦琐 的编码的技术细节中解脱出来,减少开发的工作量,把主要精力用于关注业务问 题,提高开发效率和质量,正是本文关注点。 本文的目标是实现基于关系数据库的j 2 e e 应用设计成果到应用项目实现代码 的快速转化。通过参与多个基于j 2 e e 技术平台的应用软件项目的开发工作,总结 了这类系统从架构设计到实现细节上的共性,结合主流开源框架软件的特点,设 计实现了快速开发应用系统的代码生成引擎。代码生成引擎固化了应用系统的架 构设计及部分编码细节,使开发人员从繁琐的技术细节中解脱出来,并且开源软 件是通过充分测试的。本课题包括x y l 建模体系构建和代码生成引擎设计实现两 部分,项目需求和部分设计细节表现为瑚l 需求模型文件,通过引擎解析x m l 文 件生成业务层代码( c r u d 枷o n 、v a i i d a t i o n 、c o m ,e r s i o n 、 i n t e r n a t i o n a l i z e 等) ,模型层代码( j a v a b e a n 、d a o 、o r m a p p i n g 等) 及表示层代码。代码生成引擎在a n t 环境下执行,所生成代码格式规整有注释, 支持多表关联等。最后,本引擎是独立的辅助开发工具,对其的任何扩展改进简 单方便。 本课题的构思设计及最终实现均由作者独立完成。本文首先介绍了本课题涉 及的知识体系,紧接着详细阐述了x m l 需求建模体系和代码生成引擎的设计、实 现和应用。 关键词:代码生成引擎,j 2 e e ,开源框架,x m l a b s t r a c t f o l l o w i n gt h ei n f o r m a t i z a t i o nf o o t s t e p s ,m o s tc o m p a n ya l le x p e c tb u i l d i n gs o m e s y s t e m sa d a p tt ot h e i rb u s i n e a sr e q u i r e m e n t a san e wf o r mo fm a t u r ed i s t r i b u t e d c o m p u t i n gt e c h n o l o g y , j 2 e e i sw i d e l yu s e di nm o s tf i e l d s i ti sf l e x i b l et oi m p l e m e n t a n ya p p l i c a t i o ns y s t e mw i t hi t sa d j u s t a b l ea n dp a t u l o u sf r a m e w o r k e s p e c i a l l y , f o ri t s p l a i ns t r u c t u r eo fe a c hl a y e ra n dp l a t f o r mu n a t t a c h e df e a t u r e , j 2 e ei sap r e f e r r e dc h o i c e f o ri n f o r m a t i z a f i o nc o n s t r u c t i o n t od e v e l o p i n gi n f o r m a t i o ns y s t e m ,d e v e l o p e r sw i l lb e i nt h ef a c eo fn o to n l yt h et e c h n o l o g yd e t a i l sb u ta l s ot h ec o m p l i c a t e db u s i n e s s r e q u i r e m e n t , w h i c hs i t u a t i o nb l o c k i n gt h eh e a d w a yo fs u c c e s s h o w t oh e i pt h e d e v e l o p e r sb r e a ka w a yf r o mc o c k a m a m i et e c h n o l o g yd e t a i l sa n dp a ym o r ea t t e n t i o no n b u s i n e s sl o g i ci so u rm a i nr o l ei nt h i sd i s s e r t a t i o n t h ep u r p o s eo ft h i sp a p e ri st or e a l i z et h ef a s tt r a n s f o r mo fj 2 e ea p p l i c a t i o nb a s e d o nr e l a t i o n a ld a t a b a s ef r o md e s i g nt op r a c t i c a lc o d e t h i se f f o r tr e l e a s e st h ed e v e l o p e r s f r o mb o r i n gc o d i n ga n dt e c h n i c a ld e t a i l s ,s ot h a tt h e yc o u l dp a ym o r ea t t e n t i o nt ot h e a n a l y s i sa n dr e s e a r c ho fb u s i n e s sa n ds t r e n g t h e nt h eq u a l i t yo ft h es o f t w a r ep r o d u c t s t h ea u t h o rh a sa t t e n d e ds o m ej 2 e eb a s e da p p l i c a t i o np r o j e c t s ,h a sp a r t i c u l a rs i g h to n t h ec o m m o n n e s so fa p p l i c a t i o np r o j e c t s c o m b i n e dw i t ht h eo p e ns o u r c ef r a m e w o r k , t h ea u t h o rd e s i g n e dan e wd e v e l o p i n gm e t h o d ,w h i c hc o n s i s t so ft w op a r t s :t h ex m l r e q u i r e m e n ts y s t e ma n dt h ec o d eg e n e r a t i o ne n g i n e t h r o u g hp a r s i n gt h ex m l r e q u i r e m e n tm o d e lf i l e s t h ec o d eg e n e r a t i o ne n g i n eh n i l da l lt h ef i l e st h en e wp r o i e c t n e e d , m o s tj a v ac l a s s e so ft h eb u s i n e s sl a y e r ( s u c ha sc r u da c t i o n , v a l i d a t i o n , c o n v e r s i o n ,i n t e r n a t i o n a l i z ef i l e s ) ,t h e m o d e ll a y e r ( s u c ha s d a o , j a v a b e a n ,o r - m a p p i n gf i l e s ) a n de v e nt h ev i e wl a y e r t h i se n g i n ei se x e c u t e d w i t ha n t ,a n dt h ec o d eb u i l tb yt h ee n 百n ei sn e a ta n dw e l lc o m m e n t e d t h ee n g i n ei sa s e l f - g o v e r n e dt o o l , a n di ti sc o n v e n i e n tt oi m p r o v e i t , c o d eg e n e r a t i o ne n g i n ei sd e v e l o p e di n d e p e n d e n t l y t h i sd i s s e r t a t i o nd e s c r i b e st h e r e l a t e dk n o w l e d g es y s t e ma tf i r s t t h e n ,e x p a t i a t e st h ex m lr e q u i r e m e n tm o d e ls y s t e m a n dt h ed e s i g na n di m p l e m e n t a t i o no ft h ec o d eg e n e r a t i o ne n g i n ei np a r t i c u l a r , e v e nt h e a p p l i c a t i o no ft h ee n g i n e k e y w o r d s :c o d eg e n e r a t i o ne n g i n e ,j 2 e e ,o p e ns o u r c ef m m e w o r k , x m l 图目录 图目录 图2 1m v c 结构图 图2 2w e b w o r k 原理图。 图3 1 持久层逻辑边界。 图3 2d a o 模式的实现层次 图3 3 持久层实现的混杂模式 图3 4 基于d a t ac l a s s 的持久层实现模式。 图3 5 基于现有持久层框架的实现模式 图3 6h i b e r n a t e 体系结构 图4 - 1t r a n s a c t i o n 的概念层模型 图4 - 2t r a n s a c t i o n 的逻辑层模型 图4 3s c h e m au m l 图模块依赖关系的包。 图5 1x m l 建模体系结构图。 图5 2 m e t a 元素 9 1 7 3 4 3 6 图5 3s i m p l e t y p e 元素4 8 图5 - 4t y p e - f a c t o r y 元素4 9 图5 5i n t e r f a c e m e t h o d 元素 图5 6m e t h o d s 元素 图5 7i n t e r f a c e 元素。 5 1 5 2 图5 8 系统层次图6 0 图5 9 系统用例图6 2 图5 1 0 代码生成引擎作用图 图5 1 1 系统工作序列图6 4 图5 1 2 系统包结构类图6 5 v i 笼为笱 表目录 表4 - 1 构造型。 表目录 3 5 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名: 鎏、k 日期:哆净妒月7 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:矍堑竺导师签名: 日期: 加叩p 月啪 第一章绪论 1 1 研究背景 第一章绪论 随着我国社会政治、经济、文化的全面发展,各行业的信息化建设的步伐日 益加快。把计算机融入到日常工作中去,利用现代化的管理工具对本行业的工作 进行必要的管理,这既是各行业加强自身管理的要求,也是提高工作效率以及信 息的准确程度的要求。同时计算机技术的日新月异,信息系统更新的速度也越来 越快。 目前国内很多正在规划建设信息系统,也有些正准备对现有的信息系统进行 更新。目前国内有很多项目是遵循j 2 e e ( j a v a2e n t e r p r i s ee d i t i o n ) 规范开发的, 而且基于j 2 e e 平台的应用现在呈上升趋势。并且大都是基于关系数据库系统的 w e b 应用系统。但国内当前情况是应用软件开发周期和实施周期长,实施成功 率低。 基于m v c 模式的公用框架的产生对项目研发带来了革命性的突破“1 。利用m v c 模式的框架,可以针对项目进行研发的分层,实现项目的快速开发。但从目前现 状来看,又面临着新的需求: 项目集中出现 因为大环境以及实际情况的影响,造成了新上项目往往集中在一个时间段内, 但是人力资源是单位时间内有限的关键资源,这就造成了资源上的冲突,这种冲 突就影响了公司承接项目的并发能力。 时间要求严格 新项目往往对时间要求很严格,在时间非常紧张的情况下,重新做设计并且 编码是对研发人员的严峻的考验,造成了研发压力很大,项目质量有可能下降。 项目维护困难 电子科技大学硕士学位论文 研发人员水平、风格参差不齐,书写的代码千差万别,造成了程序风格不统 ,修改、维护起来很不方便。造成了项目维护的效率下降。 根据上面的需求,迫切需要一种新的研发模式替代以前的研发模式。新的模 式要解决上面的需求,对项目的研发起到推动作用。调高开发效率,缩短项目周 期,同时提高软件的整体质量。针对j 2 e e 平台上开发的应用软件,需要一个基 于关系数据库的应用软件的j 2 e e 平台的代码自动生成引擎。实现基于关系数据 库的业务系统的设计成果到实现代码的快速转化,并且可以实现由非j 2 e e 的基 于关系数据库的应用到先进的j 2 e e 的平台的快速转化。缩短设计成果到代码实 现的转化的时间,节约人力资源的成本。解决最大限度的提高代码重用性、易维 护性以及减轻开发人员负担的问题。帮助开发人员从烦琐的编码的技术细节中解 脱出来,把更多的时间和精力投入到业务问题的分析和研究上,提高软件的质量。 1 2 国内外研究现状 随着编程技术的进一步发展,以及编程思想的百家争鸣,广大的开发人员和软 件企业不再满足于仅仅能够进行相关的项目开发实现,更多的将注意力转向了项 目开发的效率上,人性化体验上。代码生成技术作为一种能大大提高开发速度的 发展方向,在国内外开始慢慢的发展起来,并且也取得了很大的成就。基于n e t 和基于j a v a 甚至p h p 技术的代码生成工具都逐渐出现甚至发展壮大,在基于j a v a 语言的代码生成工具主要集中在某些方面的应用,比如简单小型网站开发框架的 代码自动生成,基于对象持久化技术的数据库访问代码自动生成,较好的例子有 著名的j 2 e e 开发插件m y e c l i p s e 就提供了从数据库到d a o 及d a o f a c t o l t , i a v a b e a n ,o rm a p p i n g 文件的生成工具。当今软件开发领域,速度和效率成了广 大工程师追求的目标,很多工程师都想到了快速的代码生成来提高开发的效率, 这是一个很有潜力的发展方向,很多组织和个人也在这个方面付出努力,并且涌 现了很多的工具和思路,比如g e n e r a t e j a v a c o d e 、r e a l - t i m e w o r k s h o p 、 s t a t e f l o wc o d e r 、m y g e n e r a t i o n 等1 2 1 ,因为不同的组织和个人在代码生成方面的研 究和侧重点各不相同,很少有应用于项且完整开发过程的代码生成工县出现。总 的来说,虽然有众多的代码生成工具的涌现,但是能站在一个系统的高度来解决 实际应用中某些问题的代码生成工具还是很少。 一 、一。 + 一 2 第一章绪论 1 3 相关研究工作 近期剑桥f o r r e s t e :研究中心基于对数百家i t 组织的调查结果发布了两份应 用发展报告,题目名为:“模型驱动比m d a 更有用”和“基于模式开发的吸引”。 报告结果对模型驱动架构m d a 并不正砸【2 1 ,而看好基于模式的开发( p a t t e r n - b a s e d d e v e l o p m e n t ) 和模型驱动的开发( m o d d d r i v e n d e v e l o p m e n t ) “模型驱动比m d a 更有 用”报告中指出:众多r r 组织都对o m g 的m d a 很感兴趣,但在实践中他们往 往选择更实际可行的方法,例如模型驱动的开发( m o d e l d r i v e nd e v e l o p m e n t ) 。m d a 是o m g 指定的平台无关的模型应用方式,但是,调查报告显示,目前采用这一方 式的人还太少。根据o m g 的定义,m d a 中会创建平台无关的模型文档化业务功 能和应用的行为,并和具体实现的技术平台代码相分离。相反,模型驱动的开发 m d d 中降低了m d a 那种严格的要求,并为模型驱动的转换提供更多的实用价值; 报告中指出,用户需要的是较低层次但更加实用的开发支持。 报告指出,尽管匹垡堂工具厂商们吹得天花乱坠,m d a 产品除了转换或简单 的代码生成之外,其它的开发支持了了无几,而且因为m d a 太通用所以其生成的 代码也几乎不可用。而模式则封装了“最佳实践”的支持,基于模式的开发使用 模式来解决一些公共的设计问题、技术实施并解决垂直领域的一些特定问题。 目前国外一些优秀的i d e ( 集成开发环境) 可视化开发工具,是针对具体代码的 编写,不具备设计成果到代码的快速转化的功能。也有像r a t i o n a l 的工具可以实现 分析、设计和代码自动实现:p o w e r d e s i g n e r 可以使用u m l 设计成果,同步在数 据库中生成表结构。但往往价格昂贵。中小企业采用这种方案实现业务信息系统 的成本太高。 开源社区有些代码生成工具,不过大都是针对某一层次的特定框架,生成的 代码无法作为完整的应用,本地化不强,还需要大量的二期开发,以适应国内的 使用现状。 国内也有些企业针对特定j 2 e e 框架,开发了自主产权的代码生成器,但是限 定在其独有的框架上,帮定在一起使用,较为封闭,且投资比较大,无法为其他 企业,尤其是中小企业所使用所使用。 3 电子科技大学硕士学位论文 在j 2 e e 开发领域,大都是基于关系数据库的w e b 应用。且s t r u t s 。w e b w o r k s p r i n g 和h i b e r n a t e 等开源框架现在得到广泛的使用,大量的实践证明了这些框架 的稳定性、可靠性和强大的功能,同时这些框架由于众多优秀程序员的贡献正日 趋完善。a n t , v e l o c i t y 等开源工具也被广泛使用,有很好的用户群体和口碑,x m l 语言也成为业界的一种标准。现在需要的是如何在此基础上,快速高质量的实现 业务信息系统,以满意现在信息化建设的需求【3 】o 1 4 论文结构组织 本文共分以下七个章节,逐步展现了本系统相关技术、系统分析、设计实现 和应用的全过程: 第一章介绍了本项目的应用背景、国内外现状和本文的组织结构; 第二章介绍了本文涉及的主要技术之一m v c 设计模式及基于此模式的优秀 框架w e b w o r k : 第三章介绍了对象持久化理论及基于持久化理论的持久层设计及开源框架 h i b e m a t e ; 第四章讲述了本项目涉及的基于x m l 技术为项目进行需求建模的思想是本 文设计理念的一个核心思想: 第五章首先介绍了软件项目需求的重要性和软件可重用性在提高生产效率方 面的作用,接着重点阐述了系统适用的体系架构及需求建模体系的设计,最后介 绍了基于x m l 建模体系的代码生成引擎的设计;最后紧承设计介绍了代码生成引 擎在项目开发中的实际应用; 最后一章是对全文的总结,并且提出一些今后进行进一步完善的方面。 4 第二章m v c 设计模式与w e b w o r k 第二章m v c 设计模式与w e b w o r k m v c 1 l 是m o d e l - v i e w - c o n t r o l l e r 的简称,即模型一视图一控制器。m v c 是x e f o x p a r c 在2 0 世纪8 0 年代为编程语言s m a l l t a l k - 8 0 发明的一种软件设计模式,至 今己被广泛使用,最近几年被推荐为s u n 公司j 2 e e 平台的设计模式,受到越来 越多的w e b 开发者的欢迎。 本章对m v c 模式的结构、特点、适用范围作了简单的分析,对典型的m v c 开源框架w e b w o r k 从原理到核心技术组成进行了必要的分析。 2 1m v c 设计模式 2 1 1m v c 设计模式概述 在面向对象系统的设计中,可以认为,类及其生成的对象是构成面向对象系 统的最基本元素;采用设计方法组合这些元素,得到构成面向对象系统的构件, 同时,这些构件的设计方法在经过不断的改进和完善后逐渐成型,成为构成面向 对象系统的基本设计参考,也称为设计模式。采用设计模式来抽象和总结系统构 件的设计方法,同时将它用于新的系统构件的设计中。使用类和对象,使元素在 层次上实现了重用性,而使用设计模式,则在系统构件的层次上实现了重用性。 设计模式提供了在特定应用场景下解决问题的类、对象及相互关系的设计方法。 这些方法并不针对于具体的系统,只是提供了一种设计系统的思考方法,一个设 计模式可能用于不同的系统,一个系统也可能会用到多个设计模式。 通常一个设计模式由四个基本要素组成: 1 模式名称( n a m e ) :设计模式的名称1 4 1 ; 2 问题( p r o b l e m ) :描述了该设计模式的使用条件; 3 解决方案( s o l u t i o n ) :详细描述该设计模式的结构、实现、各组件之间相 互关系及各自的职责和协作方式; 5 电子科技大学硕士学位论文 4 结果( c o n s e q u e n c e s ) :描述该设计模式的应用效果及使用该设计模式应权衡 的问题。 在g o f 所编写的设计模式:可复用面向对象软件的基础一书中一共提及 2 3 个标准的设计模式,在此基础上可以组合使用这些设计模式,也可以创建新的 设计模式,按照不同的应用原则,可以将标准的设计模式分为三类: 1 创建型设计模式( c y e a t i o n a lp a t t e r n s ) :用于创建对象,如f a c t o r ym e t h o d , b u i l d e r 等; 2 结构型设计模式( s t r u c t u r a lp a t t e r n s ) :用于将类和对象组合得到相应的结构, 如a d a p t e r , p r o x y 等; 3 行为型设计模式( b e h a v i o r a lp a t t e r n s ) :描述类和对象之间如何交互,一个任 务如何交由不同的对象进行处理,如c o m m a n d ,v i s i t o r 等【6 l 。 2 1 2m v c 模式的结构 m v c 设计模式由三部分组成。模型是应用对象,没有用户界面;视图表示它 再屏幕上的显示,代表流向用户的数据;控制器定义用户界面对用户输入的响应 方式,负责把用户的动作转成针对m o d e l 的操作;m o d e l 通过更新v i e w 的数据来 反映数据的变化【5 】【7 】。三者之间的关系由下图示。 v i e w 解释模型更新请求发送 用户输入给控制器允许 控制器选择视图 状态 查询 通知 改变 视图选择 用户请求 状态改变 c o n l a o l l c r 定义应用程序行为用户 输入映射为模型更新选 择响应的视图 m o d e l 厂,7 蓑| | | | 耋墨雾童萎橐要震卜聂i 广j 森 状态查询应用程序功能r 卜_ = = i 数据库 通知视图改变 一一一 图2 1m v c 结构图 6 第二章m v c 设计模式与w e b w o r k ( 1 )视图( v i e w ) 代表用户交互界面,对于w e b 应用来说,可以概括为h t m l 界面,但有可能 x h t m l ,x m l 和a p p l e t 。随着应用的复杂性和规模性,界面的处理也变得具有 挑战性。一个应用可能有很多不同的视图。m v c 设计模式对于视图的处理限于处 理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务 流程的处理。业务流程的处理交予模型( m o d e l ) 处理。比如一个订单的视图只接 受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制 和模型。 ( 2 ) 模型( m o d e l ) 就是业务流程状态的处理以及业务规则的制定。模型接受视图请求的数据, 并返回最终的处理结果。业务模型的设计可以说是m v c 最主要的核心。m v c 并没有 提供模型的设计方法,而只告诉用户应用该组织管理这些模型,以便于模型的重 构和提高重用性。 业务模型还有一个很重要的模型那就是数据模型。数据模型主要是指实体对 象的数据保存。比如将一张订单保存到数据库,从数据库获取订单。可以将这个 模型单独列出,所有关系数据库的操作只限制在该模型中。 ( 3 ) 控制器( c o n t r o l l e r ) 可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请 求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什 么样的模型,选择什么样的视图,可以完成什么样的请求。控制层并不做任何的 数据处理。例如,用户点击一个链接,控制层接受请求后,并不处理业务信息, 它只把用户的信息传递给模型,告诉模型做什么,选择符合的视图返回给用户。 因此,一个模型可能对应多个视图,一个视图可能对应多个模型。 2 1 3m v c 模式优点 在最初的j s p 网页中,像数据库查询这样的数据层代码和像h t m l 这样的表 示层代码混合在一起,而m v c 模式从根本上将它们强制分开,这样给开发带来的 7 电子科技大学硕士学位论文 好处是毋庸置疑的 首先,多个视图能共享一个模型。同一个w e b 应用程序会提供多种用户界面, 比如用户希望既能通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱, 这就需要w e b 网站同时提供i n t e m e t 和w a p 界面。在m v c 中,模型响应用户请 求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示 层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。 其次,模型是自包含的,与控制器和视图保持相对独立,所以可以方便地改 变应用程序的数据层和业务规则。如果把数据库从m y s q l 移植到o r a c l e ,或者把 r d b m s 改变成l d a p 数据源,只需改变模型即可。一旦正确实现了模型,不管数据 来自数据库还是l d a p 服务器,视图都会正确显示它们。由于m v c 的三个模块相 互独立,改变其中一个不会影响其它,所以依据这种设计思想能构造良好的松耦 合的构件。 此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不 同的模型和视图去完成用户的需求,也可以为构造应用程序提供强有力的手段。 给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行 处理,然后选择适当的视图将处理结果显示给用户。 2 2 开源框架w e b w o r k 2 2 1w e b w o r k 简介 w e b w o r k l 8 l 是由o p e n s y m p h o n y 组织开发的【9 1 ,致力于组件化和代码重用的拉 出式m v c 模式j 2 e e w e b 框架。w e b w o r k 目前最新版本式2 2 ,现在的w e b w o r k 2 x 前身是r i c k a r do b e r g 开发的w e b w o r k ,但现在w e b w o r k 已经被拆分成了x w o r k l 和w e b w o r k 2 两个项目。 x w o r k 简洁、灵活功能强大,它是一个标准的c o m m a n d 模式实现,并且完全 从w e b 层脱离出来。x w o r k 提供了很多核心功能:前端拦截机( i n t e r c e p t o r ) ,运 行时表单属性验证,类型转换,强大的表达式语言( o g n l , t h eo b j e c tg r a p hn o t m i o n l a n g u a g e ) ,i o c ( i n v e r s i o no fc o n t r o l 反转控制) 容器等 第二章m v c 设计模式与w e b w o r k w e b w o r k 建立在x w o r k 之上,处理h t r p 的响应和请求。w e b w o r k 使用 s e r v l e t d i s p a t c h e r 将m 1 甲请求变成a c t i o n ( 业务层a c t i o n 类) ,s e s s i o n ( 会话) a p p l i c a t i o n ( 应用程序) 范围的映射,r e q u e s t 请求参数映射。w e b w o r k 支持多视 图表示,视图部分可以使用j s p ,v e l o c i t y ,f r e e m a r k e r ,x m l 等。 2 2 2w e b w o r k 的核心技术 w e b w o r k 实际上是一个前端控制器( f r o n tc o n t r o l l e r ) 设计模式的实现。它通 过一个分发( d i s p a t c h e r ) 象把客户端发送的u r l 请求映射到一个命令对象中, 该命令对象在后台完成与系统内部模型的交互,并根据处理后的返回结果把控制 权映射到某一个具体的视图,最后在视图层表达式语言o g n l 对更新后的结果进 行显示。其原理如下图2 2 示: 图2 2w e b w o r k 原理图 2 2 2 1 s e r v l e t d i s p a t c h e r 的原理 s e r v l e t d i s p a t e h e r 是w e b w o r k 框架的控制器。所有对a c t i o n 调用的请求都将 通过这个s e r v l e t d i s p a t c h e r 调度。它是在w e b x m l 里配置s e r v l e t d i s p a t c h e r 时指定 的,让所有对w e b w o r ka c t i o n ( 默认的是a c t i o n 的后缀) 的请求都对应到该调度 的j a v a s e r v l e t 中。s e r v l e t d i s p a t c h e r 接受客户端的 r r r p 请求,将j a v a s e r v l e t 的很 9 电子科技大学硕士学位论文 多相关对象进行包装,再传给x w o r k 框架,由x w o r k 框架去解析x w o r k x m l 配 置文件,根据配置文件的信息,创建对应的a c t i o n ,组装并调用相应的拦截器, 执行a c t i o n ,返回执行结果。w e b w o r k 使用x w o r k 的核心,主要是由这个 s e r v l e t d i s p a t c h e r 去实现的。 s e r v l e t d i s p a t c h e r 的主要功能调用如下: 1 ) i n i t ( ) 方法在服务器启动时调用 a 、初始化v e l o c i t y 引擎,检查配置文件,对一些文件上传信息进行设置。 2 ) s e r v i c e ( ) 方法,每次客户端的请求都将调用此方法。 a 、通过r e q u e s t 请求取得a c t i o n 的命名空间( n a m e s p a c e ,与x w o r k x m l 配置 文件里p a c k a g e 标签的n a m e 对应) 。 例如:f o o t o o l m y a c t i o n a c t i o n ,取得的命名空间为f o o t o o l 在删x m l 配置文件里应该有这一段; m y a c t i o n ) 在x w o r k x m l 配置文件里应该有: p a c k a g e n a m e = ”f o o b a r a c t i o nn a m e = m y a c t i o n ” c ,创建a c t i o n 上下文( e x t r a c o n t e x t ) 。e x t r a c o n t e x t 是一个m a p 对象,它将 所有应用请求和s e r v l e t 属性保存到一个h a s h m a p 中。 d 、根据前面获得的n a m e s p a c e 、a c t i o n n a m e 、e x t r a c o n t e x t ,创建一个 a c t i o n p r o x y 1 0 第二章m v c 设计模式与w e b w o r k a c t i o n p r o x y 在它的构造函数会根据n a m e s p a c e 、a c t i o n n a m e 读取x w o r k x m l 配置文件里这个a c t i o n 的所有配置信息。然后它会创建a c t i o n i n v o c a t i o n 的构造函 数中又会创建a c t i o n 对象,将它放入o g n l v a l u e s t a c k 中,再根据e x t r a c o n t e x t ,创 建与a c t i o n 对应的上下文( a c t i o n c o n t e x t ) 。最后它会取得与这个a c t i o n 相关的 所有拦截器,放到j a v a u t i l i t e r a t o r 对象中。 2 。2 2 2 a c t i o n w e b w o r k 最重要的特征之一就是a c t i o n 接口。它提供在页面与业务逻辑之间 的映射,从而起到控制业务流程的作用。下面是a c t i o n 接口的代码: p a c k a g et o m o p c u s y m p h o n y x w o r k ; i m p o r tj a v a i o s e r i a l i z a b l e ; p u b l i ci n t e r f a c ea c t i o ne x t e n d ss e r i a l i z a b l e p u b l i cs t a t i cf i n a ls t r i n gs u c c e s s = “s u c c e s s : p u b l i cs t a t i c 如a ls t r i n gn o n e = “n o n e ; p u b l i cs t a t i cf i n a ls t r i n ge r r o r = e r r o r : p u b l i cs t a t i cf i n a ls t r i n gi n p u t = “i n p u t : p u b l i cs t a t i cf i n a ls t r i n gl o g i n = “l o g i n : p u b l i cs t r i n ge x e c u t e 0t h r o w se x c e p t i o n ; ) e x e c u t e ( ) 是a c t i o n 里最主要的方法。它执行后返回s t r i n g 类型,返回值一般 用向上面定义的静态常量。这和x w o r k x m l 配置文件中的r e s u l t 标签的n a m e 是对 应的( 关于x w o r k x m l 文件的配置,将在下面介绍) 。它决定了在调用a c t i o n 的方 法后,返回什么样的结果。上面定义的静态常量的含义如下: s u c c e s s :表示a c t i o n 正确的执行完成,返回相应的视图; n o t e :表示a c t i o n 正确地执行完成,但并不返回任何视图; 1 1 电子科技大学硕士学位论文 e r r o r 表示a c t i o n 执行失败,返回到错误处理视图; i n p u t :表示a c t i o n 的执行,需要从前端界面获取参数,i n p u t 就是代表这 个参数输入的界面,一般在应用中,会对这些参数进行验证,如果验证没有通过, 将自动返回到该视图; l o g i n :表示a c t i o n 因为用户没有登陆的原因没有正确的执行,将返回该登 陆视图,要求用户进行登陆验证。 由于一个用户请求就会对应一个a c t i o n ,因此所要做的就是写一些自己的 a c t i o n 类,这些类一定要实现a c t i o n 接口,并填写e x e c u t e 方法。例如: p u b l i cc l a s sh e l l o w o r l d a c t i o ni m p l e m e n t sa c t i o n p u b l i cs t r i n ge x e c u t e 0 s y s t c m 。o u t p r n l m ( h e l l ow o d d ! ) ; 在这里可以调用其他的业务逻辑 r e m ms u c c e s s ; 可以看到,在a c t i o n 的e x e c u t e 方法中,不需要任何参数,这样设计的一个很 明显的好处就是,不将整个w e b 应用部署到w e b 容器中,即可对所写的a c t i o n 类进行测试,这给开发人员带来了极大的方便。而且由于它不依赖于s e r v l e t 请求, 更加强了它的可移植、可重用性。 那么,a c t i o n 又是怎样来获得用户的输入数据的呢? 下面是一段x w o r k x m l 中的配置文件: h e l l o - r e s u l t j s p 1 2 第二章m v c 设计模式与w e b w o r k 假设已经有了h e l l o j s p ,和h e l l o r e s u l t j s p 这两个页面,h d l o j s p 代码如下: h e l l o i n p u tt y p e = t e x t ”n a m e = n a m e ) 该页面就只有一个输入框和一个提交按钮。点击后,请求被s e r v l e t d i s p a t c h e r 接收,它根据配置文件中的 ,将 会调h e l l o a c t i o n 来处理业务。r e s u l t 标签指明了程序正确返回后将会转向的页面, 这里的n a m e 是和e x e c u t e 0 方法中返回的s u c c e s s 对应的, h e l l o r e s u l t j s p 指定执行成功后,将会转到h e l l o - r e s u l t j s p 页面。但是,如果用户要在h e l l o j s p 中提交数据

温馨提示

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

评论

0/150

提交评论