(计算机软件与理论专业论文)基于spring、ibatis与struts的轻量级java+ee编程研究.pdf_第1页
(计算机软件与理论专业论文)基于spring、ibatis与struts的轻量级java+ee编程研究.pdf_第2页
(计算机软件与理论专业论文)基于spring、ibatis与struts的轻量级java+ee编程研究.pdf_第3页
(计算机软件与理论专业论文)基于spring、ibatis与struts的轻量级java+ee编程研究.pdf_第4页
(计算机软件与理论专业论文)基于spring、ibatis与struts的轻量级java+ee编程研究.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

基于s p r i n g 、i b a t i s 与s t r u t s 的轻鼍级j a v ae e 编程研究 上海师范大学硕士学位论文 摘要 j 2 e e 平台的成熟,为w c b 应用程序更进一步的发展提供了更广阔的空间。目 前很多应用系统是建立在w e b 基础上,基于b s 结构的w 曲应用程序也成为 i n t e m e t 上使用最为广泛的应用开发技术。 本文引入轻量级开发思想与开源框架,构建了一个j a v ae ew e b 应用系统的解 决方案。作者结合了现有的w e b 框架技术,s t r u t s 、s p r i n g 和i b a t i s 框架,与自己 在实际开发过程中遇到的问题,完成了该方案的分析设计与实现。作者不仅在文章 中介绍了整个框架的设计、各种技术的选择与优劣性,还给出了当前j a v ae e 开发 中,基于此类技术开发过程中,常见问题的改进策略。并在适当的地方引入在开发 过程中作者的总结与最佳实践。 本文利用现有的w e b 框架技术实现s t r u t s 框架、s p r i n g 框架和i b a t i s 框架集 成,提出基于j a v ae e 多层框架解决方案。以可伸缩性、透明性、高可用性和扩展 性作为前提,从编程角度而言,对j a v a e e 编程中常见的问题进行了改善。 本文首先从当前j a v a e e 编程中,常常困扰广大开发人员的问题展开分析。从 技术路线与架构出发,分析,在整体上说明了构建最终解决方案所涉及的基本概念 的技术。接着提出本解决方案如何改进编程。本文是按方案中的功能层次分别从表 现层,持久层,数据访问层三个层次讨论了该方案的具体设计与实现。最后,本文 介绍了该方案中,各层的具体设计与实现。 关键词:j a v ae e ,轻量级,s t r u t s ,s p r i n g ,i b a t i s 基于s p r i n g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 a b s t ra ( 了r a tp r e s e n ts om a n ya p p l i c a t i o ns y s t e m sa r ee s t a b l i s h e do nt h ef o u n d a t i o no ft h ew e b , t h ew e ba p p l i c a t i o np r o c e d u r eb a s e do nb ss t r u c t u r ea l s ob e c o m e st h em o s tw i d e s p r e a d a p p l i c a t i o nd e v e l o p m e n tt e c h n o l o g yo ni n t e m e t b u tw i t ht h em a t u r i t yo fj 2 e ep l a t f o r m ,i t h a sp r o v i d e dab r o a d e rs p a c ef o rt h ef u r t h e rd e v e l o p m e n to ft h ew e ba p p l i c a t i o n p r o c e d u r e t h i sa r t i c l ei n t r o d u c e st h el i g h t w e i g h td e v e l o p m e n tt h o u g h ta n do p e ns o u r c e f r a m e w o r k ,a n dc o n s t r u c t sas o l u t i o nt ot h ej a v ae ew e ba p p l i c a t i o ns y s t e m h a v i n g c o m b i n e dt h ee x i s t i n gw e bf r a m e w o r kt e c h n o l o g y ,t h es t r u t sf r a m e w o r k , t h es p r i n g f r a m e w o r ka n dt h ei b a t i sf r a m e w o r kw i t ht h eq u e s t i o n sw h i c him e e ti nt h ea c t u a l p e r f o r m a n c ep r o c e s s ,t h ea u t h o rh a sc o m p l e t e dt h ea n a l y s i sd e s i g na n dt h er e a l i z a t i o n n o t o n l yd oli n t r o d u c et h ee n t i r ef r a m e w o r kd e s i g n t h ec h o i c ea n ds u p e r i o r i t ya n di n f e r i o r i t y o f e a c hk i n do ft e c h n i c a l ,b u ta l s og i v et h ei m p r o v e m e n ts t r a t e g yo ff a m i l i a rq u e s t i o n s b a s e do nt h i sk i n do ft e c h n o l o g yi nt h ec u r r e n tj a v ae ed e v e l o p m e n t a n da u t h o r s s u m m a r ya n dt h eb e s tp r a c t i c ei si n t r o d u c e di nt h es u i t a b l ep l a c e t h i sa r t i c l eu s e st h ee x i s t i n gw e bf r a m e w o r kt e c h n o l o g yt or e a l i z et h ei n t e g r a t i o no f t h es t r u t sf r a m e w o r k ,t h es p r i n gf r a m e w o r ka n dt h ei b a t i sf r a m e w o r k ,a n db r i n g s f o r w a r dt h es o l u t i o nb a s e do nj a v ae e m u l t i l a y e rf r a m e w o r k t a k i n gs c a l a b i f i t y , t r a n s p a r e n c y ,h i g ha v a i l a b i l i t ya n ds c a l a b i l i t ya sp r e m i s e ,t h ea r t i c l ei m p r o v e st h ec o m l n o n q u e s t i o ni nt h ej a v ae ep r o g r a m m i n gf r o mt h ep r o g r a m m i n ga n g l e t h i sa r t i c l ef i r s ta n a l y s e sb e g i n n i n gw i t ht h eq u e s t i o n sw h i c hf r e q u e n t l yp u z z l et h e g e n e r a ld e v e l o p m e n tp e r s o n n e li nt h ec u r r e n tj a v ae ep r o g r a m m i n g s t a r t i n gw i t ht h e t e c h n i c a lr o u t ea n da r c h i t e c t u r e ,t h i sa r t i c l ea n a l y s e sa n de x p l a i n e st h eb a s i cc o n c e p ta n d t e c h n o l o g yw h i c h i si n v o l v e dw i t ht h ec o n s t r u c t i o no ff m a ls o l u t i o na sa w h o l e ,a n dt h e n p r o p o s e sh o w t h i ss o l u t i o nd o e si m p r o v et h ep r o g r a m m i n g t h i sa r t i c l ed i s c u s s e st h e c o n c r e t ed e s i g na n dr e a l i z a t i o no ft h i sp l a na c c o r d i n gt ot h ef u n c t i o nl a y e r ss e p a r a t e l y 基于s p r i n g 、i b a l l s 与s t r u t s 的轻最级j a v ae e 编程研究 上海师范人学硕士学位论文 f r o mt h ep r e s e n t a t i o nl a y e r , t h ep e r s i s t e n c el a y e r , a n dt h ed a t aa c c e s sl a y e r f i n a l l y ,t h i s a r t i c l ei n t r o d u c e se a c hl e v e lc o n c r e t ed e s i g na n dr e a l i z a t i o ni nt h i sp l a n k e yw o r d s : j a v ae e ,l i g h t w e i g h t ,s t r u t s ,s p r i n g ,i b a t i s 论文独创性声明 本论文是我个人在导师指导下进行的研究工作及取得的研究成果。论文中除 了特爨燕跌薮洼巍致落的遗方癸,夸懿含葵毽天或参t 秘已经发表或撰写过戆臻究 成果。其他同志对本研究的启发和新徽的贡献均已在论文中做了明确的声明并表 示了谢意。 作者签名砰醐疆裁:獬滓增艿; 论文使用授权声明 本人完全了解上海师范大学有关僚露、使用学位论文的援定,即:学校露权 强整送交论文豹笈印 争,竞诲论文教焱澜襄嫠德;学校霹戮公蠢论文豹全部躐部 分内容,可以采用影印、缩印或其它手段保存论文。傈密的论文在解密岳遵守此 规定。 作者签名碍孤睁筛签名毫津逢目潮:? 廊7 身雪8 砖毋 o u 1 1 论文背景及概述 第一章绪论 i n t e r n e t 的出现彻底改变了整个开发架构,原来c s 架构中需要安装在每个用户 桌面上的客户端应用程序消失了,只需要“浏览器和e m a i l 客户端”但是这增加了开 发的复杂性,j a v a e e 的出现促使了应用程序的开发和开发过程的标准化。 j 2 e e 是当今可用于企业软件开发的最佳平台之一。它结合了j a v a 编程的多种 优点和过去l o 多年中企业软件开发中的经验。但是我们不能忽视,对许多w e b 应 用程序来说,j 2 e e 没有取得显著的成功i ”。遗憾的失败和耀眼的成功可能一样平 常。在项目投资上,j 2 e e 项目经常显示较小的价值,大多数都超过预算:在项目实 施中,许多项目无法按期完成;在性能方面,许多应用程序达不到预期性能,而且某 些则完全不符合需求;其宣传的可靠性和可扩展性常常无法兑现;与需求的复杂性相 比,应用程序代码常常要复杂得多。这种复杂性不仅对于开发,而且对于项目的整 个生命周期来说都是昂贵的、浪费的。复杂性是导致b u g 的一个主要原斟1 1 。 对于应用开发来说,降低开发成本、缩短开发周期、提高可维护性和运行效率 是其追求的目标。对于w e b 开发来说也不例外。j 2 e e 平台的出现在一定程度上减 少了w e b 应用开发的成本和复杂度,但是其本身过于复杂的体系结构、难预测、开 发和维护成本的高昂,使得j 2 e e 的架构方案常常无法让人满意 j 2 e e 应用系统中出现过度的复杂性,有两种主要原因1 1 1 : 1 架构性原因:“经典的”j 2 e e 架构和e j b 技术造成了很高的复杂性。 极为常见的情况是,实际需求根本不需要这样高的复杂性。在导致不必要的复 杂性的原因之中,也许使用分布式架构是最重要一个。 2 文化性原因:应用服务器厂商、复杂的开发工具、开发者喜好有趣的技术 的自然倾向、企业中的政治环境,都可能对系统的复杂性产生影响。 基于s p r i n g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 然而,j 2 e e 是一个庞大的平台,它的复杂性意味着许多j 2 e e 应用程序很难维 护、可靠性差、效率低下。开发人员必须花费大量的时间学习复杂的a p i 和繁琐的 程序模型,这常常导致较长的开发周期。 本论文的一个主要论题,就是介绍如何降低j 2 e e 应用系统的复杂性。我将关 注于以下几点: 避免编写复杂的冗余代码。 选用开源框架,避免开发复杂的内部专用基础架构 1 2 研究开发的内容及意义 1 2 1 现实中存在的问题: s t r u t s 是一种基于w e b 的m v c 解决方案,它是针对使用j a v a 开发w e b 站点过 程中一个日益普遍的问题而开发的。当一个站点日趋复杂时,维护各种j s p 页面之 间的关系,维护后台业务逻辑,维护表单( f o r m s ) 以及验证( v a l i d a t i o n s ) 变的越 来越困难。这也是很多j s p 站点最后不得不寿终正寝的原因所在1 2 j 。 从j a v a1 1 开发就已经加入了j d b ca p i ,用于以基于s q l 的方式访问关系型 数据库这种做法对于如今的很多应用程序仍旧适用。j d b c 能够以很高的性能执行 基于数据集的操作,这种时候s q l 非常强大而且易用。j d b c 的目标不是要给关系 型数据提供一个面向对象的视图,也不会牺牲目标数据库专有的强大功能。 传统型j d b c 有许多积极的方面使之在许多j 2 s e 和j 2 e e 应用程序开发中占有 重要地位。然而,也有一些特征使其难于使用1 3 j : 开发者需要处理大量复杂的任务和基础结构,例如大量的t r y c a t c h f i n a l l y t r y c a t c h 块。 应用程序需要复杂的错误处理以确定连接在使用后被正确关闭,这样以来使 得代码变得冗长,膨胀,并且重复。 j d b c 中使用了极不明确性的s q l e x c e p t i o n 异常,没有引入具体的异常子类 层次机制。相应于任何一种错误,都只是抛出s q l e x c e p t i o n 异常一无论它来 源于j d b c 驱动程序还是来源于数据库,这使得程序员很难理解到底是哪里 实际出现了错误。例如,如果s q l 对象是无效的或已经被锁定,那么将抛出 一个s q l e x c e p t i o n 异常。调试这样的异常需要一定的时间来检查s o l 状态 值和错误代码。 编写j d b c 代码并不是一项容易的工作一存在大量的重复性的工作。在大多数 j a v a 项目中,大部分代码都是样板代码。异常处理就属于此类代码。即使业 务逻辑只有3 到4 行代码,用于异常处理的代码也要占1 0 到2 0 行。 1 2 2 本课题在实际应用中的作用 改进在编程中,h t t p 请求中表单( f o r m s ) 的维护性以及验证机制。 在异常体系中,引入s p r i n g 框架中的异常机制。把业务异常与运行时异 常区别开来,分别加以对待。在一定程度上,解决了j d b c 给开发带来的 复杂性和危险性。 简化j 2 e e 编程模型,有助于开发简单,高质量,可维护,高性能,可伸 缩性的j 2 e e 应用。更加有效的使用j a v ae e 更好地用轻量级的、更具可测性的开源框架解决企业级开发中的问题。 1 3 实现目标 本文的研究内容就是要通过对s 硼n g 框架的分析,针对s t r u t s 框架缺乏对业务 对象管理的不足,将s p r i n g 与s t r u t s 进行整合,目的是提出一个框架整合方案,进 而形成一个新的框架结构。使得此框架在前端拥有s t r u m 框架所提供的灵活的控制 层和视图层,同时又能够利用s p r i n g 中的l o c 容器和a o p 支持,使得实际的应用 系统在业务上有着良好的可扩展性。由此,本文的目标为: 通过对s p r i n g 框架的研究,探讨s p r i n g 与s t r u t s 整合的实现方法,并将 两者集成到一起,从而形成一个新的体系结构。同时验证此架构的可用性。 对s t r u t s 中的表单维护与验证进行探讨。改进s t r u t s 中的业务流,引入抽 象f o r m 来处理基本验证,使得在业务中复杂的表单验证机制得以改善。 对j 2 e e 持久层的异常处理的研究。本文将讨论如何让异常处理保持简单和 直观,使开发人员可以专心于开发业务逻辑,而不是把时间浪费在编写异常 处理的样板代码上。本文还将说明用于在j 2 e e 环境中创建和处理异常的基 础知识和指导原则,并提出了一些可以使用异常解决的业务问题。本文将使 用s p r i n g + i b a t i s 框架作为业务逻辑实现。 基于s p r i n g 、i b a t i s 与s t r u m 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 第二章轻量级j a v ae e 应用平台的技术与开源框架 2 1 轻量级开发核心原则及常用技术 轻量级方法强调开发中测试第一,积极调动客户和重构。轻量级框架鼓励人们 使用简单原始的j a v a 对象( p o j o ) 编程,而不是类似e j b 的重量级面向组件模 型。轻量级设计模式在对象和集成服务之间进行松散耦合,而无需艰苦地编写业务 逻辑或领域模型1 4 】。 2 1 1 轻量级开发原则 1 ) 争取简单性。开发人员应该尽量使用最简单的方法解决问题。 2 ) 修补漏洞。许多开发方法可能不鼓励在过程中进行重构或变更,因为这些 行为不直接用于产生客户代码。轻量级开发要求可以自由地修补太复杂或 充斥b u g 的代码。我们在开发时,需要为它做出预算。 3 ) 自动化单元测试。在开发过程中,应该优先编写测试用例。广泛的单元测 试改善客户体验,并提高代码的设计水平,这是因为它强迫我们在编码 前,解耦联系过于紧密的代码。 这些原则并不能完全包含我们采用何种技术和开发过程,但它有利于描述开发 体验。在开发时,就不至于做出无效技术选择,或者开发一些不必要的工件。确立 原则后,就该规划一个有效过程了。 2 1 2 轻量级开发过程 紧凑、快速的开发过程通常从敏捷开发方法当中得到灵感。通常,敏捷开发包 括下列原则【4 】: 1 ) 专注现场客户和代码,而不是其他设计技巧。您可以使用其他技巧,本方 案不需要它。 2 ) 简化文档。为了需要,宁可使用电子表格中的一行来描述,也不使用令人 困惑的用例图。 基于s p r i n g 、i b a l l s 与s t r u t s 的轻鼍级j a v ae e 编程研究 上海师范大学硕士学位论文 3 ) 只做足以完成工作的设计工作。不要对设计或性能过分忧心忡忡,使自己 陷入绝境。 4 ) 为了开发,努力进行简化并保证至少每天都集成您所构建的程序,必要时 进行重构。自动化测试。 2 1 3 轻量级开发常用技术 l 、依赖注入 最新一代容器称为轻量级容器,它们使用一个共同设计原理:依赖注入。对这 个简单思想来说,这是一个复杂的术语。依赖注入将对象和它所依赖的东西交给第 三方。然后第三方创建所有对象并将它们绑在一起。比方说,称为m y d a o 的数据 访问对象需要一个称为d s 的数据源。那么该容器会一同创建它们,并设置一个属 性: 清单1 创建一个第三方汇编程序 m y d a o = i l e wd a o ( ) : d s = n e wd a t a s o u r c e 0 : m y d a o s e t d a t a s o u r c e ( d s ) : 当然,不创建这种第三方汇编程序的话,也可以使用框架来做其他附加的工作 ( 如提供配置支持) 。s p r i n g 框架、p i c o 和h i v e m i n d 就扮演了这个角色。其他像 j a v a s e r v e rf a c e s ( i s n 框架也利用了依赖注入。 2 、面向对象编程 使用面向对象编程( a o p ) ,可以编写通用的功能性模块( 称为方面) 例 如,日志、事务、安全或持久性。a o p 使您可以将这些方面联系到p o j o ,然后指 定一个时间点( 如方法开始时或产生异常时) 和另一个需要联系的方面。例如,我 们可能想要创建一个外观事务对象。在调用方法时将t r a n s a c t i o n b e g i n 方面关联到 外观方法。然后在产生异常时将r o l l b a c k 方面关联到外观的异常。最后,在方法结 束时将c o m m i t 方面关联到外观的方法。在配置中完成这些工作,而不是通过编写 代码。依靠这种能力,我们就可以创建一个简单的p o j o 事务、安全或远程访问。 这对企业应用程序非常有用。使用这些工具,我们可以完全放弃e j b ,或者最小化 它的作用。而这正是轻量级组件所要做的。 3 、透明持久性 持久性也是建立在较简单的编程模型之上。透明持久性框架通过配置而不是编 写代码,为应用程序添加持久性。因为大多数应用程序是面向对象的,并且访问一 个关系数据库。 2 2j a v ae e 各层开源开发框架 2 2 1 表现层框架简介 s t r u t s 是一个基于s u nj 2 e e 平台的m v c 框架,主要是采用s e r v l e t 和j s p 技术 来实现的。由于s t r u t s 能充分满足应用开发的需求,简单易用,敏捷迅速,在过去 的几年中颇受关注。s t r u t s 把s e r v l e t 、j s p 、自定义标签和信息资源( m e s s a g e r e s o u r c e s ) 整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实 现全套m v c 模式,极大的节省了时间,所以说s t r u t s 是一个非常不错的应用框架 1 5 j 。 w e b w o r k 是由o p e n s y m p h o n y 组织开发的,致力于组件化和代码重用的拉出式 m v c 模式j 2 e e w e b 框架1 5 j ow e b w o r k 目前最新版本是2 1 ,现在的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 a 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 a t i o nl a n g u a g e ) ,i o c ( i n v e r s i o no f c o n t r o l 倒置控制) 容器 等。w e b w o r k 2 建立在x w o f k 之上,处理h t t p 的响应和请求。w e b w o r k 2 使用 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 ( ! l k 务层a c t i o n 类1 ,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 2 支持多视 图表示,视图部分可以使用j s p ,v e l o c i t y ,f r e e m a r k c r ,j a s p e r r e p o r t s ,x m l 等。在 w e b w o r k 2 2 中添加了对a j a x 的支持,这支持是构建在d w r 与d o j o 这两个框架 的基础之上。 t a p e s t r y 是一个开源的基于s e r v l e t 的应用程序框架,它使用组件对象模型来创 建动态的,交互的w e b 应用1 5 l 。一个组件就是任意一个带有j w c i d 属性的h t m l 标 记。其中j w c 的意思是j a v aw e bc o m p o n e n t 。t a p e s t r y 使得j a v a 代码与h t m l 完全分 离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升 级。t a p e s t r y 支持本地化,其错误报告也很详细。t a p e s t r y 主要利用j a v a b e a n 和x m l 技术进行开发。 s p a n gm v c 是结构最清晰的m v cm o d e l2 实现【5 1 。它的a c t i o n 也不叫 a c t i o n ,而是称做c o n t r o l l e r :c o n t r o l l e r 接收r e q u e s t ,r e s p o n s e 参数,然后返回 m o d e l a n d v i e w ( 其中的m o d e l 不是o b i e c t 类型,而是m a p 类型) 。但在其它的 w e bf r a m e w o r k 中,a c t i o n 返回值一般都只是一个v i e wn a m e :m o d e l 则需要通过 其它的途径( 如r e q u e s t a t t r i b u t e ,c o n t e x t 参数,或a c t i o n 本身的属性数据) 传递上 去。 2 2 2 持久层框架简介 h i b e r n a t e 是一个开放源代码的对象关系映射框架,它对j d b c 进行了非常轻量 级的对象封装,使得j a v a 程序员可以随心所欲的使用对象编程思维来操纵数据库 1 7 1 。h i b e r n a t e 可以应用在任何使用j d b c 的场合,既可以在j a v a 的客户端程序实 用,也可以在s e r v l e t j s p 的w e b 应用中使用,最具革命意义的是,h i b e r n a t e 可以 在应用e j b 的j 2 e e 架构中取代c m p ,完成数据持久化的重任1 5 i 。 使用i b a t i s 提供的o r m 机制,对业务逻辑实现人员而言,面对的是纯粹的 j a v a 对象,这一层与通过h i b e r n a t e 实现o r m 而言基本一致,而对于具体的数据 操作,h i b e r n a t e 会自动生成s q l 语句,而i b a t i s 则要求开发者编写具体的s q l 语句。相对h i b e r n a t e 等“全自动”0 r m 机制而言,i b a t i s 以s q l 开发的工作量 和数据库移植性上的让步,为系统设计提供了更大的自由空间1 7 】。作为“全自动” o r m 实现的一种有益补充,i b a t i s 的出现显得别具意义。 基于s p r i n g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 第三章w e b 层 随着j 2 e e 平台的成长和传播,j 2 e e 技术中成长最迅速的部分正是j a v a s e r v e r p a g e s ( j s p ) 。几乎每个使用j a v a 开发基于w e b 的应用的人现在都会使用j s p 。自 由、开放源码的j s p s e r v l e t 容器( 例如a p a c h ej a k a r t a 项目中的t o m c a t ) 的存在更 急剧促进j s p 的应用。 随着j s p 的成熟以及开发者对j s p 更富经验,使用所谓w e b 应用框架( 或就称 为框架) 的开发者的数目得到了爆炸性增长。框架通过为应用开发提供预先准备好 的起步器,来帮助开发者更快地建立应用。新项目将不再以这样的问题开始:“我 们应该使用一个框架吗? ”,而是会问:“我们应该使用哪一个框架? ” 3 1s t r u t s 应用框架 s t r u t r 味源于a p a c h ej a k a r t a 项目是这些框架中的王者。它无可辩驳地 是所有框架中最好的并且使用最广泛的。它的身后正在形成一股风潮。而且还有另 外一个很好的原因:作为a p a c h ej a k a r t a 项目的旗舰框架,它随之带来了可观和巨 大的用户基础。 3 1 1w e b 应用 s t r u t s 的目标是建立w e b 应用1 2 】。这种说法有几个含义。s t r u t s 一般是用来构建 客户端软件,是w e b 游览器的应用程序。 使用游览器作为客户端软件来构建应用,是1 9 9 5 年以来i n t e r n e t 技术最大的转 变。最初,这类应用只是在i n t e r n e t 上得到初步应用,并且系统用户一般使用游览 器。从大概1 9 9 9 年底开始,情况发生了改变。现在,所有的公司似乎想把每个应 用都构建成以游览器为基础的。 这归功于此方法具有在非常有说服力的经济成效。对公司来说,部署新的应用 到内部用户的桌面系统时,如果采用游览器作为客户端软件,将是非常经济的。如 果是一个由v i s u a lb a s i c 或者p o w e r b u i l d e r 编写的c l i e n t s e r v e r 或者其它w i i l 3 2 客 户应用,安装和升级应用程序时需要把软件安装到客户机的桌面上。如果安装一个 基于s p r i n g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 于游览器的新应用,只须简单地发给客户一个指向它的u r l 。升级基于w e b 的应 用比安装更简单。最终用户什么都不用做。只须再次来到达个站点,他将看到一个 应用的最新版本。 因此,无论你的应用的用户来自内部组织还是来自i n t e r a c t ,s t r u t s 都可以节省 你可观的创建时间。前提是客户端程序是一个游览器。 s t r u t s 的目标是建立w e b 应用,这个说法的第二个含义是指s t r u t s 构建的应用 程序兼容基于j a v as e r v l e t 规范的w c b 应用。j a v as e r v l e 规范是更大的j 2 e e 规范的 一部分。作为一个兼容的w e b 应用( 或简称w e b a p p ) ,s t r u t s 应用具备: 1 ) 一个标准的目录结构。 2 ) 某些标准的配置文件( w e b x m l 以及其它的) 。 3 ) 作为j a v a 类或j s p 页面的动态部署功能。 4 ) 标准的w e b 存档( w a r 文件) 格式用来部署。 3 1 。2s t r u t s 框架中的组件 s t r u t s 框架基于以下两个基本组州2 l :一个m o d e l v i e w c o n t r o h e r 结构,它使开 发灵活的应用变的更加容易,以及一套j s p 自定义标记来构建j s p 页面。 一。一。i :s e t h , i e i j s p 容器: 号影 坷a e 学t i o n s e r v e 喳 l ( 模型) 窄i ik 峄 j a v a b e a n e j b i t t c 翟, 裔 、 i i : 田3 i : 1 基于s p r i n g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编稃研究 上海师范大学硕士学位论文 s t r u t s 的m o d e l v i e w c o n t r o l l e r 架构大大简化了w c b 应用的构建,因为它提供 了一个模型,你可以向其中加入组件。m o d e l 提供了一个内部的数据表示。v i e w 显 示数据,而不去大量的业务逻辑打交道。c o n t r o u c r 决定执行的过程以及下上步做什 么。它是在j s pm o d e l 2 的基础上实现的一个m v c 框架,其结构如图3 1 所示。 由上图可见,s t r u t s 的模型部分包含j a v a b e a n 和e j b 组件,控制器由 a e t i o n s e r l e t 和a c t i o n 组成,视图部分包含j s p 和s t r u t s 客户化标签。下面分别简单 介绍s t r u t s 的a c t i o n f o r mb e a n ,s t r u t s 的初始化流程和s t r u t s 相应的客户请求的工作 流程。 l 、a c t i o n f o r mb e a n a c f i o n f o r mb e a n 也是一种j a v a b e a n ,它除了具有一些普通j a v a b e a n 的常规方 法外,还包含一些用于h t m l 表单数据以及将其属性重新设置为默认值的特殊方 法。如图3 2 所示 圈3 2 s t r u t s 框架利用a c t i o n f o r mb e a n 来进行v i e w 组件和c o n t r o l l e r 组件之问表单数 据的传递。s t r u t s 框架把v i e w 组件接收到的表单数据保存在a c t i o n f o r m b e a n 中, 并把它传递给c o n t r o l l e r 组件。而c o n t r o l l e r 组件可以对a c t l c l n f o r mb e a n 中的数据 进行修改。j s p 文件使用s t r u t s 标签读取修改后的a c t i o n f o r mb e a n 的信息。重新设 定h t m l 表单。 2 、s t r u t s 框架的初始化流程 s t r u t s 框架的初始化流程并不是很复杂1 6 】。在w e b 应用启动时会加载并初始化 控制器a c t i o n s e r v l e t , 而a c t i o n s e r v l e t 从s t m t s - c o n f i g x m l 文件中读取配置信息,把 它们存放到a c t i o n m a p p i n g 对象中。这就完成了s t r u t s 框架的初始化。 基于s p 血g 、i b a t i s 与s t r u t s 的轻量级j a v ae e 编程研究 上海师范大学硕士学位论文 3 、s t r u t s 框架响应客户请求的工作流程 s t r u t s 框架对应客户请求的工作流程如下。 ( 1 ) 判断a c t i o n m a p p i n g 实例是否存在。如果实例不存在,则创建一个 a c t i o n m a p p i n g 对象,它包含了把请求转发给哪个a c t i o n 的信息。 ( 2 ) 判断a c t i o n f o r m 实例是否存在。如果实例不存在,则创建一个 a c t i o n f o r m 对象,并把客户提交的表单数据保存到a c t i o n f o r m 对象中。 ( 3 ) 根据配景信息决定是否需要表单验证。如果需要验证,就调用a c t i o n f o r m 的v a l i d a t e 0 方法。 ( 4 ) 如果a c t i o n f o r m 的v a l i d a t e 0 方法返回n u l l ,或返回一个不包含 a c t i o n m e s s a g e 的a c t i o n e r r o r s 对象,就表示表单验证成功。如果返回一个或 多个a c t i o n e r r o r 的a c t i o n e r r o r s 对象,则表示表单验证失败。将直接把请求 转发给包含客户提交表单的j s p 组件。在这种情况下,不会再创建a c t i o n 对象 并调用a c t i o n 的e x e c u t e 方法。 ( 5 ) a c t i o n s e r v l e t 根据配置信息决定将请求转发给哪个a c t i o n 。如果相应的 a c t i o n 实例不存在,就先创建这个实例,然后调用其e x e c u t e ( ) 方法。 ( 6 ) a c t i o n 的e x e c u t e ( ) 方法返回一个a c t i o n f o r w a r d 对象,a c t i o n s e r v l e t 再把客户请求转发给a c t i o n f o r w a r d 对象指向的j s p 组件。 ( 7 ) a c t i o n f o r w a r d 对象指向的j s p 组件生成动态网页,返回给客户。 s t r u t s 标记库是用来创建v i e w 组件的。对j s p 开发的一个传统挑战是,程序员 有一个趋势一在他们的页面中频繁使用j a v a s c r i p t l e t l 2 1 。这使得页面对h t m l 设 计者来说愈发复杂和难以维护。s t r u t s 标记库提供了一套j s p 自定义标记,通 常j s p 开发者和页面设计人员都可以理解。这些自定义标记提供了强大的功能,并 且它们的格式经过精心设计以简化页面的开发。 3 2 目前存在的问题 s t r u t s 目前已经达到一个稳定的状态,并足以支持产品级应用。世界上很多的 站点包括企业内部和外部的i n t e r a c t 站点都在去年基于s t r u t s 的产品级应 用。下面的表格描述了前面提到的请求驱动的w e bm v c 框架的对象与s t r u t s 中对 象之间的关系。 基于s p r i n g 、i b a t i s 与s t r u t s 的轻龟级j a v ae e 编程研究 上海师范大学硕士学位论文 控制器 a c t i o n 拦截器 c o m m a n d f c ) r m a c t i o n f o r m 验证器 a c t i o n f o r m 或声明式规则 验证错误收集器 a c t i o n e r r o r s 模型a c t i o n f o r m 或手工填入的r e q u e s t 属 性 视图引用 a c t i o n f o r w a r d 表3 1 目前,s t r u t s 是m v cw e b 框架的事实标准【s l 。它的一个主要好处是它提供了对 接收到的表单数据进行验证的内置界面。如果有任何验证失败,则应用程序都会重 新显示h t m l 表单,这样就可以改正无效的数据了。如果验证成功,则处理过程会 继续进行。s t r u t s 框架的简单验证界面会减少与处理数据验证有关的令人头疼的事 情,这样你就可以把精力集中到验证代码上,而不是放到捕获数据、重新显示不完 整或无效数据的技巧上。但是它远远不够完美。s t r u t s 内置的验证流程也有缺点1 9 】。 例如,在整个应用程序中验证代码常常会大量重复,因为许多验证需要相同的验证 逻辑。对一些相似字段的验证逻辑进行任何修改都要求在几个地方修改代码,还要 重新编译受影响的代码。当一个站点日趋复杂时,维护各种j s p 页面之间的关系, 维护后台业务逻辑,维护表单( f o r m s ) 以及验证( v a l i d a t i o n s ) 变的越来越困难。 结果是很多j s p 站点最后不得不寿终正寝。 3 3s t r u t s 框架的改进 3 3 1w e b 层设计目标 在一个分层的j 2 e e 应用程序中,w e b 层结构应该像中间层一样有着可维护性 和可重用性。w e b 层维护和扩展的主要目标是: 一个清晰的w e b 层,将流程控制和业务对象的调用( 由j a v a 控制器对象处 理) 与数据的展现( 由j s p 页面等视图组件处理) 分开。 w e b 层应该尽可能地薄,也就是说,除了启动用户动作的业务处理以及显示 结果之外,为应该再有其他的j a v a

温馨提示

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

评论

0/150

提交评论