(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf_第1页
(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf_第2页
(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf_第3页
(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf_第4页
(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机应用技术专业论文)基于java的web框架webspark的设计与实现.pdf.pdf 免费下载

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

文档简介

摘要 基于j a v a 的w e b 框架w e b s p a r k 的设计与实现 作者简介:林超良,男,1 9 8 1 年4 月出生,2 0 0 4 年9 月师从成都理工大学洪志 全教授,于2 0 0 7 年6 月获硕士学位。 摘要 w e b s p a r k 是一个用j a v a 编写的按照m v c 分层模型来构建的w e b 框架。简洁,易 用,灵活是w e b s p a r k 的设计原则,同时在该框架的具体实现中也体现了一种组件 化的思想。 w e b s p a r k 框架接收服务器端容器转发的用户请求,通过解析请求的路径信 息,把该请求映射为相应的业务逻辑处理单元。业务逻辑处理单元完成相关的业 务处理后,把操作结果递交给拦截器。拦截器组件通过读取配置文件中的信息, 对操作结果进行进一步处理。最后,w e b s p a r k 把处理的最终结果当作用户请求的 响应返回给客户端。 在w e b s p a r k 的具体实现中,使用了模式设计、j a v a1 5 的范型、标注、x m 、 x m l b e a n s 、x p a t h 、s c h e m a 等目前比较流行的技术。总体来说,w e b s p a r k 框架的 控制流程清晰明了,设计合理,是一个扩展性好,实用性强,配置灵活的w e b 框 架。 关键词:j a v a ;w e b 框架;模式设计;拦截器 成都理上人学硕士学位论文 j a v a b a s e dw e bf r a m e w o r k w e b s p a r kd e s i g n a n d i m p l e m e n t a t i o n a b s t r a c t w e b s p a r ki saw e bf r a m e w o r k w h i c hi sc o m p l i e dw i t ht h em v c d e s i g np a t t e m a n di sd e v e l o p e db yj a v a b r i e f n e s s ,e a s yt ou s ea n da g i l i t ya r et h ed e s i g nt a r g e t so f w e b s p a r k f i r s tw e b s p a r ka l s or e p r e s e n t sab a s e d o n c o m p o n e n t sd e s i g ni d e a w e b s p a r k r e c e i v e st h eh t t pr e q u e s tf r o mt h es e r v e r - s i d ec o n t a i n e r t h e ni tp a r s e st h er e q u e s t s p a t hi n f o r m a t i o na n dm a p si t t oas p e c i a lb u s i n e s s - l o g i c a lo b j e c t a f t e rt h a tt h e b u s i n e s s - l o g i c a lo b j e c te x e c u t e ss o m er e l a t e df u n c t i o na st h er e q u e s tr e q u i r e sa n d t r a n s p o r t s t h er e s u l tt ot h e i n t e r c e p t o r s t h ei n t e r c e p t o r sg e t s t h e c o n f i g u r e i n f o r m a t i o nf r o mt h ex m lf i l eb yu s i n gt h ex m l b e a n sa n dx p a t ha n dg i v e st h e r e s u l th a n d e df r o mt h eb u s i n e s s l o g i c a lo b j e c taf u r t h e ro p e r a t i o n a tl a s t ,w e b s p a r k r e t u r n st h ef i n a l l yr e s u l ta st h er e s p o n s ef o rt h eh t t pr e q u e s tt ot h ec l i e n ts i d e i m p l e m e n t i n gt h ew e b s p a r k ,s o m ep o p u l a rt e c h n o l o g yh a sb e e nu s e d ,s u c ha s t h ed e s i g np a t t e r n ,j a v a1 5n e wf e a t u r e ,a n n o t a t i o n ,g e n e r i c s ,x m l ,x m l b e a n s , x p a t h ,s c h e m a t o t a l l y , w e b s p a r k sc o n t r o ll a y e rd e s i g ni sc l e a ra n dr e a s o n a b l e i t s a ne a s i l ye x t e n d ,p r a c t i c a la n df l e x i b l ew e bf r a m e w o r k k e y w o r d s :j a v a ;w e bf r a m e w o r k :d e s i g np a t t e r n ;i n t e r c e p t o r 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特期j j j n 以标注和致谢的地力夕h ,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得盛整理互盍堂或其他教 育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何 贡献均己在论文中作了明确的说明并表示谢意。 加0 年;月珈h 学位论文版权使用授权书 本学位论文作者完全了解盛壑堡王盍堂有关保留、使用学位论文的规定, 有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和 借阅。本人授权盛壑堡王盍堂叮以将学位论文的全部或部分内容编入有关数 据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 靴敝储虢祢蔓娘 沁年;月如r 第1 章0 言 1 1 什么是w e b 框架 第1 章引言 框架( f r a m e w o r k ) 是一种面向对象的软件重用技术,或者说是一组可重用 的模块或组件。这个模板或者组件是用于提供给开发人员来构建更为复杂系统。 框架应该是经过检验的,稳健的,可扩展的,从而可以减低构建复杂系统时带来 的风险,有利于以后系统的维护和升级。同样,w e b 框架是用于构建w e b 应用 系统的模板或组件。而w e b 应用系统包括门户网站,在线o a 系统、e r p 、c r m 系统等。 1 2 为什么使用w e b 框架 随着互联网( i n t e m e t ) 与网络技术的迅速发展,不断出现了各种各样的w e b 应用系统。在开发各种应用系统的过程中,由于系统本身的复杂性,开发人员技 术水平参差不齐,开发周期过长或者是开发团队人员变动等因素影响,随着系统 功能的不断完善,代码规模的同益增大,系统中的b u g 以及代码的混乱情况也 越来越多,从而造成了项目质量下降以及r 后维护系统的困难。 在这种情况下,人们就开始采用w e b 框架来构建系统。采用w e b 框架可以 更好的管理代码,保证代码完成的质量以及方便日后系统的维护。因为这些框架 的代码都是经过反复测试的,在实践中多次检验,有一定的信心保证。另外, w 曲框架一般都拥有分层设计的思想,这样可以方便开发人员按照实际项目的需 要来扩展框架。系统的核心控制部份交由w e b 框架来处理,开发人员就可以更 好地集中精力在系统的业务逻辑上,从而保证项目完成的质量。 目前,有各种技术实现的w e b 框架,比较流行的有j a v a 、n e t 、c 牟、p h p 等。而本文讨论的框架是基于j a v a 开发语言。 1 3m v c 框架架构 m v c ( m o d e l - - v i e w - - c o n t r o l l e r ) 的框架架构,是一种在框架架构设计上分 层思想的体现,也是目前绝大部分框架所采用的架构设计。这个架构主要是把一 个应用系统分为模型层( m o d e l ) ,表示层( v i e w ) 和控制层( c o n t r o l l e r ) 。 视图( v i e w ) 代表用户交互界面,对于w e b 应用来说,可以概括为h t m l 界 成都理j 人学硕寸:学位论文 面,但有可能为x h t m l 、x m l 和a p p l e t 。随着应用的复杂性和规模性,界面 的处理也变得具有挑战性。一个应用可能有很多不同的视图,m v c 设计模式对 于视图的处理仅限于视图上数据的采集以及用户的请求,不包括在视图上业务流 程的处理。业务流程的处理交予模型( m o d e l ) 处理。 模型( m o d e l ) :就是业务流程状态的处理以及业务规则的制定。业务流程的 处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处 理结果。业务模型的设计可以说是m v c 最主要的核心。对一个开发者来说,主 要是专注于业务模型的设计。 控$ 1 j ( c o n t r o l l e r ) 可以理解为从用户接收请求,将模型与视图匹配在一起,共 同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个 分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。 控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后,并 不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要 求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多 个模型。 模型、视图与控制器的分离,使得个模型可以具有多个显示视图。如果用 户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都 应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通 知所有的视图,导致显示的更新。这实际上是一种模型的变化一传播机制。 第2 章w e b 框架现状 第2 章w e b 框架现状 2 1 基于j a v a 的w e b 框架 目前比较流行的基于j a v a 的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 等。h i b e r n a t e 框架主要是用于对象持久化的,也就是把存储在对象中的数据序 列到相应的关系数据库中。它本身不涉及到w e b 应用系统的控制管理或流程管 理。s p r i n g 是目前最流行的对象管理框架。它提出了l o c ( i n v e r s i o no fc o n t r 0 1 ) , 控制反转的概念,把对对象的管理,包括对象的初始化,销毁等,以及事务的管 理,全部交由s p r i n g 来完成。这样做,可以更方便地完成系统单元测试,保证 系统功能完成的质量,同样可以把所有的事务做统一的处理。 虽然s p r i n g 也有对系统控制流程的管理模块,但这部份功能并不理想,也 不是s p 6 n g 的主要特色,一般都是把s p r i n g 与其它框架来共同搭建系统。本文 所侧重讨论的是关于系统控制流程管理的框架。而在这方面最为典型的是s t r u t s 和w e b w o r k 。 2 2s t r u t s 与w e b w o r k 比较 s t r u t s 是a p a c h e 期下的一个开源的项目,也是现在最为流行,使用得最多 的w e b 框架之一。目前s t r u t s 分为两个主要版本,1 x 和2 0 。这两个版本的主 要差别在于,s t r u t s2 0 是s t r u t s 与w e b w o r k 合并后,内核被重新改写过的版本, 在整个分层的架构上与w e b w o r k 是基本上一致的。而我们现在要讨论的是s t r u t s 1 x ( 下面讨论所提及到的s t r u t s 也是指s t r u t s1 x ) 。 s t r u t s 最主要的特点是:该框架把表示层传过来的参数值,用一个j a v a b e a n 对象对其进行封装,然后框架通过查找系统的配置x m l 文件,把这个j a v a b e a n 对象与相应的控制处理对象相关联,从而把页面上的参数值传送到相应的功能模 块来完成相应的业务逻辑。在这里面,j a v a b e a n 对象充当起一个d t o ( d a t a t r a n s p o r to b j e c t ,数据传输对象) 对象的角色,把表示层的数据传送到业务逻辑模 块。这样做的好处是可以实现表示层与模型层的解耦,也就可以使应用系统的开 发过程中相应开发人员的分工。使页面设计人员与业务逻辑开发人员的工作相分 离,从而更专注于各自领域的开发工作。 w 曲w o r k 是o p e n s y m p h o n y 组织开发的,致力于组件化和代码重用的拉出 式m v c 模式j 2 e ew e b 框架。w 曲w o r k 的版本主要有1 x 与2 x 。w e b w o r k2 x 成都理l :人学硕十学何论文 现在已经拆分成w e b w o r k 2 和x w o r k 两部份了。x w o r k 提供了很多核心功能: 前端拦截机( i n t e r c e p t o r ) ,运行时表单属性验证,类型转换,强大的表达式语言 ( 0 g n l t h e o b j e c t g r a p h n o t a t i o n l a n g u a g e ) ,i o c ( i n v e r s i o n o f c o n t r o l 倒置控 制) 容器等。w e b w o r k 2 建立在x w o r k 之上,处理h r r p 的响应和请求。 本文所讨论的是w 曲w b r k1 x ( 以下提及到的w e b w o r k 也是指w 曲w j r k 1 x ) 。w 曲w b r k 的主要特点是提出了拦截器组件和在x m l 配置文件中引入包的 概念。拦截器组件是在业务逻辑功能组件运行之前或之后被调用的,对业务逻辑 功能组件是完全透明的,也就是与业务逻辑组件是完全解耦的。正因为这样,拦 截器可以在业务逻辑处理之前或之后随意地添加或减少,从而可以很灵活地满足 应用系统的特定要求,也方便同后的维护和升级工作。另外,由于在配置x m l 文件中引入“包”的概念,使得配置文件中不同的“包”之前可以相互继承,这 样就可以在配置文件中省去很多重复的内容,达到简单配置的目的。 s t r u t s 与w 曲w o r k 的横向比较,可以通过表2 1 来表述。 表2 ,1s t r u t s 与w e b w o r k 的特性比较 特性s t r u t sw e b w o r k a c t i o nc l a s s s t r u t s 要求a c t i o n 类继承一个抽象a c t i o n 必需实现w e b w o r k a c t i o n 类。这也说明了s t r u t s 的一个常见问接口。还有其他接口可以实现其 题:针对抽象类编程而不是接口他服务,如保存错误信息,获取 本地化文本等。a c t i o n s u p p o r t 类实现了其中的一些接口,也可 以用作基类。w e b w o r k 全部针对 接口编程,这样很容易插入你自 己的实现 线程模型 s t r u t s 的a c t i o n 必须是线程安全的w e b w o r k 的a c t i o n 每一个请求使 因为它仅使用一个示例处理全部请_ i j 一个实例,一次就不存在线程 求这一限制导致s t r u t s 的a c t i o n安全问题实践中,每一次请求 执行过程中使用的任何资源必须是线s e r v l e t 容器都会生成许多将被 程安全的或同步访问。丢弃的对象,多一个或几个对象 并没有证明会带来性能问题或垃 圾收集问题 对s e r v l e t 的依 s t r u t s 的a c ti o n s 依赖于s e r v l e t s ,w e b w o r k 的a c t i o n 没有绑定w e b 冈为执行时使_ h j ( 获取) 了s e r v或其他任何容器。w e b w o r k 的 赖性 l e t r e q u e s t 和s e r v l e t r e s d o n s e ( 而 a c t i o n可以选择从 不是h t t p s e r v l e t r e q u e s t 和h t t pa c t i o n c o n t e x t 中获取r e q u e s t s e r v l e t r e s p o n s e ) 绑定s e r v l e t s和r e s p o n s e ,但这不是必须的并 ( 虽然不是h t t p s e r v l e t ) 实际上就且仅当绝对必要时才是_ i j ,这并 与s e r v l e t 容器绑定了,而这种依赖不会与w e b 容器绑定 关系并不需要。例如,s e r v l e t 可以 在w e b 环境之外运行,但j m s 就不能 第2 章w e b 框架现状 可测试 已经有许多测试s t r u t s 应用的策略, w e b w o r k 的a c t i o n 可以通过实例 但主要障碍实际是s t r u t s 的a c t i o n化a c t i o n ,设置属性并执行的方 与w e b 紧密的绑定在一起( 获取 式进行测试 r e q u e s t 和r e s p o n s e 对象) 。着导致 人们经常在一个容器中测试s t r u t s 的a c t i o n 这样做既缓慢而又无法 进行单元测试 f o r m b e a n s s t r u t s 需要为每个表单使_ jw e b w o r k1 x 允许直接使用 f o r m b e a n ,这产生了大量的多余的类a c t i o n 的属性( 也就是标准的 或者不得不使用d y n a b e a n ,而这恰j a y a b e a n 属性) ,属性可以包含 恰是这一限制的产物丰富的对象类型甚至可以有自己 的属性,而这些属性都可以从 w e b 页面中访问w e b w o r k 也支持 f o r m b e a n 模式 表达式语言 s t r u t s 使用标准的j s p 将对象绑定到w e b w o r k 设置了值栈,w e b w o r k 标 p a g e c o n t e x t ,这使得视图与 签库可以从中十分灵活的动态查 f o r m b e a n 紧密耦合找所需的值,而不需要将视图与 数据类型紧密耦合这样就可以 在很大的范围内复_ j 视图 类型转换 s t r u t s 的f o r m b e a s 属性通常都是字w e b w o r k1 x 使用p r o p e r t y e d i 符串。s t r u t s 使用c o m m o n s b e a n u tt o t s 进行类型转换。p r o p e r t y i i s 进行类型转换。每个类使用一个e d i t o r s 针对类型而不是 转换器,但不允许为每个实例配置不a c t i o n ,但字段错误信息可以加 同的转换器。获取一个有意义的类型到活动的字段信息表中并自动显 转换错误并显示给用户也是很难做到示给h j 户 的 前后处理模式 必须创建一个继承基类a c t i o n 的类 类继承 来作为a c t i o n 前后处理的代理,这 将导致类继承层次过深,也可能因为 单继承的限制而无能为力 对a c t i o n 执行 s t r u t s 设置一个a c t i o n 对象,而你由a c t i o n f a c t o r y 链控制a c t i o n 对执行的顺序几乎无法控制要改变创建和初始化的过程,但需要编 过程的控制 这一点。我认为需要编写自己的写一个类 s e r v l e t 来自行处理分发 ( d i s p a t c h i n g ) 从表2 1 的比较可以看出,w e b w o r k 的设计要比s t r u t s 优秀,架构更加合理。 但s t r u t s 简单易懂,对初学者来说更容易上手,而且s t r u t s 拥有很大的开源社区 和丰富的学习资料,很方便学习。相对而言关于w e b w o r k 的资料要少得多。 2 3 相应模型的不足 s t r u t s 的控制流程部件非常明了简单,但相应的配置x m l 文件过于庞大, 成都理i :入学硕十学位论文 配置容易混乱,而且模型组件( a c t i o n ) 需要用户来线程同步,这是非常需要改 进的地方。 w e b w o r k 的架构设计很优秀,扩展性也很好,但w e b w o r k 的配置复杂。而且 对于初学者来说,由于太过灵活,不容易上手使用。另外w e b w o r k 提供的一些功 能,如类型转换,在实际的丁f 发过程中用处不大。 s t r u t s 与w e b w o r k 都同属于典型的基于m v c 分层的w e b 框架。分层的目的 是希望把每个功能模块尽量解耦,方便系统的开发以及以后的维护工作。但无论 是s t r u t s 的用一个j a v a b e a n 来给表示层和模型层解耦,还是在w e b w o r k 中把表 示层的属性直接写入到模型层的代码中的做法,都不能从真正意义上实现表示层 与模型层的解耦。本文所讨论的w e b 框架,w e b s p a r k ,将用另一种方式来解决这 个问题,同时,会把a o p ( a s p e c to r i e n t e dp r o g r a r r x n i n g ,面向方面编程) 引入 到w e b s p a r k 的设计中,使w e b s p a r k 设计成配置简单,使用方便,组件化的w e b 框架。 第3 章w e b s p a r k 模型设计 第3 章w e b s p a r k 模型设计 3 1w e b s p a r k 设计原则 w e b s p a r k 是一个轻量级的w e b 框架。轻量是指该框架只提供一般用于开发 j 2 e e 的应用系统所需的流程控制模块,不包括e j b ( e n t e r p r i s ej a v a b e a n s ) 、 j m s ( j a v am e s s a g es e r v i c e ) 等企业级应用所需的功能。w e b s p a r k 是一个小巧灵 活的,容易扩展的,使用简单的j 2 e ew e b 框架。小巧灵活是指该框架只把用户 最常使用的功能添加到罩面,并且这些功能可以通过组件的形式随意装卸而不对 框架本身进行较大的改动。另外容易扩展是每一个w e b 框架都必需要实现的目 标,这样的框架才会有生命力,才容易更好地适应各种应用系统的需求。而 w e b s p a r k 框架基本都是由各个不同的核心部件组装起来的,这个部件甚至可以 由用户到自由更换,只要用户能提供满足一定要求的组件,就可以集成到 w e b s p a r k 中。同时w e b s p a r k 的具体使用比较简单和直观,不需要对系统做太多 的配置就可以搭建起一个应用系统。 3 。2w e b s p a r k 的基本模型 传统的w e b 应用系统的流程没有分层的概念,可以用图3 1 表述。 客房端 发送请求 服务器端 返回页面 相应的业务逻辑模块 查找相应的页面 返同业务逻辑的结果il 处理业务逻辑 数据库以及其它系统资源 图3 1 传统w e b 应用系统的处理流程 从图3 1 可以看出,传统的w e b 应用系统是把业务逻辑代码嵌入到页面中。 这样做的弊端在于页面元素与业务逻辑元素祸合在一起,从而使整个系统在开发 时结构上很混乱以及系统维护的复杂度加大。 成都理j :人学硕+ 学何论文 目前流行的w e b 框架都是基于b i v c ( m o d e 卜v i e w c o n t r 0 1 l e r ,即模型一视图 控制器) 设计模型。这个模型大概可以用以图3 2 来表述。 图3 2 基于w c 设计模型的w e b 应用系统处理流程 w e b s p a r k 是基于m v c ( m o d e l v i e w - c o n t r o l l e r ,即模型一视图一控制器) 设 计模型的。这个设计模型按层来划分可以分为模型层,表示层和控制层。在一个 应用系统中,表示层可能会是一些页面,例如h t m l 、j s p 等,而模型层指的是用 于处理具体业务逻辑的功能模块,这是开发人员主要精力完成的地方。最后控制 层负责整个系统的流程控制,事务控制,请求调度的管理,是连接表示层和模型 层的中间模块,在整个系统中处于核心的位置。这往往是框架大显身手的地方。 本文所设计的w e b s p a r k 框架也是主要专注于控制层的设计与实现。 3 。3w e b s p a r k 控制层设计 在众多的w e b 框架中,s t r u t s 的控制层设计是比较典型的。在讨论w e b s p a r k 的控制层设计之前,我们先与s t r u t s 的控制层作比较。以下图是s t r u t s 的控制 层的概要设计: 第3 章w e b s p a r k 模型设计 服务器端容器转发用户请求 s t r u t s 核心调度模块根据用户请求去查找系统的配置文件 根据配置文件把用户请求中的数据封装成j a v a b e a n 对象 实例化业务逻辑处理对象( a c t i o n 对象) ,并把j a v a b e a n 对象赋予该对象 a c t i o n 对象调用模型层来具体完成相应业务逻辑。 模型层返同具体处理的结果 a c t i o n 对象把控制权返同给s t r u t s 核心调度模块 核心调度模块再根据配置文件转发到用户请求的页面 框架把业务逻辑处理的结果传送到表示层 表示层组装数据,生成页面文件,并把控制权交还给核心调度模块 核心调度模块把表示层生成的页面作为最终结果返同剑服务器端容器 图3 3s t r u t s 控制层概要设计 至于w e b s p a r k 的控制层设计,可以通过以下的图作一个简单的表述: 一9 一 成都理i :人学硕十学何论文 服务器端容器转发用户请求 核心调度模块根据用户请求实例化业务逻辑处理对象( a c t i o 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 对象中的配置信息 根据a c t i o n 对象的配置信息找剑相席的表示层组件 表示层组件组装业务逻辑的信息,形成相应的页面并返【亓i 给核心调度模块 核心调度模块把处理的结果返回给服务器端容易 图3 4w e b s p a r k 控制层的概要设计 对比上面两个概要设计图,可以看出w e b s p a r k 的架构要更简洁。主要与 s t r u t s 的架构有以下几点的区别: ( 1 ) w e b s p a r k 没有一个系统范围内的配置文件。所有的配置信息都存储在 每个具体的业务逻辑处理单元( a c t i o n 对象) 中,也就是每个具体的业务逻辑处 理单元都对自己的处理动作做出明确的指示。这样做的好处是,可以把配置具体 细化到每个处理单元中。避免了把所有配置内容整合成一个庞大而且杂乱的配置 文件。另外把配置细化到每个处理单元,可以使同一个a c t i o n 对象集成更多的 业务处理单元,使相关联的业务逻辑可以归属到同一段代码中或同一个类中,方 便开发人员不同职能之间的分工合作。 ( 2 ) w e b s p a r k 没有具体的f o r m b e a n 对象,也就是说不需要有一个专门的 对象或类来完成数据传送的工作。这样做的原因的两个。首先是因为一个应用系 统,或者一个网站,会有非常多的各种各样的表单( f o r m ) ,如果类似于s t r u t s 的设计,对页面上的每一个表单,都用一个对象来存储表单中所有的参数值,会 在系统中产生很多的类,使得整个系统的代码变得臃肿。而这些表单中很多内容 是相同的,也就是说很多参数是相同的,只不过这些参数存放于不同的表单之中, 第3 章w e b s p a r k 模型设计 这样就导致了与表单相对应的f o r m b e a n 对象中,很多的属性是一样的,只不过 分属于不同的类而已。从实现功能来讲,这些f o r m b e a n 对象都同是一种d t o , 是负责表示层与模型层之间传送数据的。所以没必要专门设立这种f o r m b e a n 对 象。其次,表单上的参数与f o r m b e a n 对象的属性直接相连,这样表单上的改动 会直接引起f o r m s e a n 对象的改变。要应用系统的开发过程中,表示层,或者说 页面上的改动是非常频繁的。如果对于每一次页面上表单的改动都要修改相应的 f o r m b e a n 对象,就要重新编译相关的代码,重新部署整个系统,所带来的工作 量是很大的,有时候代价还是很昂贵的。如果能用一个通用的类或对象来实现这 些f o r m b e a n 对象的功能,无疑是最好的。而这正是w e b s p a r k 的一个设计特点所 在。 ( 3 ) 在与s t r u t s 控制层设计的对比当中,w e b s p a r k 多出了一个中“拦截 器( i n t e r c e p t o r ) ”的组件。“拦截器”的概念是由w e b w o r k 提出并加以实现。 这是一个很优秀的架构设计。拦截器的作用在于它是运行在业务逻辑处理单元 ( a c t i o n 对象) 的运行之前或之后,而对于a c t i o n 对象来说是完全透明的。 a c t i o n 对象只需要完成自己相应的功能,无需察觉到拦截器的存在与否。这样 就可以把一些全局的事务,例如日志记录,时间记录,记费管理,用户信息管理 等事务,全部独立出来,交由拦截器来完成。当要往应用系统中添加新的全局性 的业务逻辑时,不需要对系统做过多的改动,就可以把新增加的业务逻辑纳入到 全局的事务当中去。在w e b s p a r k 中,拦截器这一组件的设计大体上与w e b w o r k 相类似,但在w e b s p a r k 的实现中引入了a o p ,并对w e b w o r k 原有的拦截器实现 作了改进。 成都理r :人学硕十学位论文 第4 章w e b s p a r k 详细设计 4 1 核心调度模块a p p l i c a t i o n s e r v l e t 的设计与实现 4 1 1w e b s p a r k 核心调度模块a p pi ic a tio n s e r vie t 核心调度模块在整个框架中负责总的流程控制。它所要实现的功能包括接收 服务器端转发的用户请求,返回应用系统处理的结果,管理业务处理单元对象, 根据用户配置信息进行流程控制,以及组装返回的页面信息。在整个框架中是连 接表示层和模型层的关键组件。 在w e b s p a r k 框架中核心调度模块a p p l i c a t i o n s e r v l e t 是基于s e r v l e t 的。 目前大多的流行框架都是基于s e r v l e t 。 4 1 2 什么是s e r vj e t s e r v l e t 是一个很优秀的服务器端实现。它与协议和平台无关。s e r v l e t 运 行于j a v a e n a b l e dw e bs e r v e r 中,可以动态地扩展s e r v e r 的能力,并采用请 求一响应模式提供w e b 服务。 s e r v l e t 看起来像是通常的j a v a 程序,只是导入特定的属于j a v as e r v l e t a p i 的包。因为对象字节码可动态地从网络加裁,可以说s e r v l e t 对服务器就如 同a p p l e t 对客房端一样。但是,由于s e r v l e t 运行于服务器中,它并不需要一 个图形用户界面。从这个角度来讲,s e r v l e t 也被称为f a c e l e s so b j e c t 。 4 1 3 基于s e r vl e t 的优点 ( 1 ) s e r v l e t 可以和其它资源( 文件、数据库、a p p l e t 、j a v a 应用程序等) 交互,以生成客户端的响应内容。如果需要,还可以保存请示一响应过程中的信 息。 ( 2 ) 采用s e r v l e t ,服务器可以完全授权对本地资源的访问( 如数据库) ,并 且s e r v l e t 自身将会控制外部用户的访问数量与访问性质。 ( 3 ) s e r v l e t 可以是其它服务的客房端程序,例如,它们可以用于分布式的 应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活s e r v l e t ( 4 ) s e r v l e t 可以被链接( c h a i n ) 。一个s e r v l e t 可以调用另一个或一系列 第4 章w e b s p a r k 详细设计 s e r v l e t ,即成为它的客户端。 ( 5 ) 采用s e r v l e t t a g 技术,可以在h t m l 页面中动态调用s e r v l e t ( 6 ) s e r v i a a p i 与协议无关。它并不对传递它的协议有任何假设。 ( 7 ) 像所有的j a v a 程序一样,s e r v l c t 拥有面向对象j a v a 语言的所有优势。 ( 8 ) s e r v l e t 提供了j a v a 应用程序的所有优势一可移植,稳健,易开发。使 用s e r v l e t 的t a g 技术,s e r v l e t 能够生成嵌于静态h t m l 页面中的动态内容。 ( 9 ) 一个s e r v l e t 被客户端发送的第一个请求激活,然后它将继续运行于后 台,等待以后的请示。每个请求将生成一个新的线程,而不是一个完整的进程。 多个客户能够在同一个进程中同时等到服务。一般来说,s e r v l e t 进程只是在服务 器卸载时被卸载。 4 1 4 核心调度模块a p p ii c a t i o n s e r v i e t 的实现 从实现的角度来讲,a p p l i c a t i o n s e r v l e t 与s e r v l e t 的关系如下u m l 图所示: ja v a x s e r v l e t h t t p h t t p s e r v l e t i n i t ( s e r v l e t c o n f i g :s e r v l e t c o n f i g ) s e r v i c e ( r e q u e s t :h t l p s e r v l e t r e q u e s t , m s p o n s t :h t c p s e r v l e t r e s p o n s e ) o r g w e b s p a r k c o r e a p p l i c a t i o n s e r v l e t i n i t ( s e r v l e t c o n f i g :s e r v l e t c o n f i 曲 s e r v i c e ( r e q u e s t :h t t p s e r v l e t r e q u e s t , r e s p o n s t :h t t p s e r v l e t r e s p o n s e ) 图4 1a p p li c a t i o n s e r v i e t 与s e r v i e t 的u m l 关系 从a p p l i c a t i o n s e r v l e t 与s e r v l e t 的u m l 关系图可以算出, a p p l i c a t i o n s e r v l e t 是继承于s e r v l e t 的,并且重写了i n i t ( s e r v l e t c o n f i g s e r v l e t c o n f i g )和s e r v i c e ( h t t p s e r v l e t r e q u e s tr e q u e s t ,h t t p s e r v l e t r e s p o n s er e s p o n s t ) 这两个方法。下面分别来讨论这两个方法的具体细节。 i n i t 方法是用于初始化s e r v l e t 对象的,是运行在s e r v l e t 对象处理用户 请求之前被调用的。该方法主要是利用服务器端容器的环境变量来初始化 s e r v l e t 对象。 s e r v i c e 方法是用于处理用户请求的。从服务器端转发过来的用户请求有两 成都理i :人学硕十学何论文 种方式,分别为g e t 方式和p o s t 方式事实上g e t 方式适用于多数请求,而保 留p o s t 仅用于更新站点。根据h t t p 规范,g e t 方式用于信息获取,而且应该 是安全的和幂等的。所谓安全的意味着该操作用于获取信息而不是修改信息。换 句话说,g e t 方式请求一般不应产生副作用。幂等的意味着对同一u r l 的多个 请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其 目标是当用户打开一个链接时,可以确信从自身的角度来看没有改变资源。 比 如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作 仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。p o s t 方式请求就不那么轻松了。p o s t 表示可能改变服务器上的资源的请求。仍然以 新闻站点为例,读者对文章的注解应该通过p o s t 请求实现,因为在注解提交之 后站点已经不同了。 在表单提交的时候,如果不指定m e t h o d ,则默认为g e t 方式请求,表单中 提交的数据将会附加在u r l 之后,以“? ”分开与u r l 分开。字母数字字符原样 发送,但空格转换为“+ “号,其它符号转换为x x ,其中x x 为该符号以1 6 进制 表示的a s c i i ( 或i s ol a t i n - i ) 值。g e t 请求请提交的数据放置在h t t p 请求协 议头中,而p o s t 提交的数据则放在实体数据中;别处g e t 方式提交的数据最多 只能有1 0 2 4 字节,而p o s t 则没有此限制。 在s e r v l e t 中有相应的方法分别对应于g e t 方式和p o s t 方式的请求,分别 为d o g e t ( h t t p s e r v l e t r e q u e s tr e q u e s t ,h t t p s e r v l e t r e s p o n s er e s p o n s t ) 和 d o p o s t ( h t t p s e r v l e t r e q u e s tr e q u e s t ,h t t p s e r v l e t r e s p o n s er e s p o n s t )。但 在是执行这两个方法之前,s e r v l e t 会默认地先调用 s e r v i c e ( h t t p s e r v l e t r e q u e s tr e q u e s t ,h t t p s e r v l e t r e s p o n s er e s p o n s t ) 走茎个方 法,因此也是a p p l i c a t i o n s e r v l e t 要重写这个方法而不是分别重写d o g e t 和 d o p o s t 这两个方法的原因。 4 1 4 1a p p l i c a t i o n s e r v l e t 的初始化 现在来讨论一下a p p l i c a t i o n s e r v l e t 在i n i t ( s e r v l e t c o n f i gs e r v l e t c o n f i g ) 方法中所做的初始化工作。 第4 章w e b s p a r k 详细设计 l i n i t m a n a g e r l c o m p o e n t , p

温馨提示

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

评论

0/150

提交评论