??xml version="1.0" encoding="utf-8" standalone="yes"?>国产在线自天天,色爱av综合网,色婷婷国产精品久久包臀http://www.aygfsteel.com/kobe09/category/12172.html爪吐奕奕征?/description>zh-cnFri, 02 Mar 2007 03:27:03 GMTFri, 02 Mar 2007 03:27:03 GMT60- J2EE体系l构设计Q?Q?/title>http://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html氧气中毒氧气中毒Wed, 14 Jun 2006 07:15:00 GMThttp://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.htmlhttp://www.aygfsteel.com/kobe09/comments/52753.htmlhttp://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html#Feedback0http://www.aygfsteel.com/kobe09/comments/commentRss/52753.htmlhttp://www.aygfsteel.com/kobe09/services/trackbacks/52753.html
一、J2EE的模?视图-控制QMVCQ体pȝ?/b>
模型-视图-控制l构是交互式应用E序q泛使用的一U体pȝ构。它有效地在存储和展C数据的对象中区分功能模块以降低它们之间的连接度Q这U体pȝ构将传统的输入、处理和输入模型转化为图形显C的用户交互模型Q或者换一U说法,是多层次的Web商业应用QMVC体系l构h三个层面Q模型(ModelQ、视?View)和控?Controller)Q每个层面有其各自的功能作用QMVC体系l构如下Q?br />

? MVC 体系l构
模型层负责表辑֒讉K商业数据Q执行商业逻辑和操作。也是_(d)q一层就是现实生zM功能的Y件模拟;在模型层变化的时候,它将通知视图层ƈ提供后者访问自w状态的能力Q同时控制层也可以访问其功能函数以完成相关的d?br />
视图层负责显C模型层的内宏V它从模型层取得数据q指定这些数据如何被昄出来。在模型层变化的时候,它将自动更新。另外视囑ֱ也会(x)用L(fng)输入传送给控制器?br />
控制层负责定义应用程序的行ؓ(f)。它可以分派用户的请求ƈ选择恰当的视图以用于昄Q同时它也可以解释用L(fng)输入q将它们映射为模型层可执行的操作Q在一个图形界面中Q常见的用户输入包括点击按钮和菜单选择。在Web应用中,它包括对Web层的HTTP GET和POST的请求;控制层可以基于用L(fng)交互和模型层的操作结果来选择下一个可以显C的视图Q一个应用程序通常?x)基于一l相兛_能设定一个控制层的模块,甚至一些应用程序会(x)Ҏ(gu)不同的用L(fng)型具有不同的控制层设定,q主要是׃不同用户的视图交互和选择也是不同的?br />
在模型层、视囑ֱ和控制层之间划分责Q可以减少代码的重复度Qƈ使应用程序维护v来更单。同时由于数据和商务逻辑的分开Q在新的数据源加入和数据昄变化的时候,数据处理也会(x)变得更简单?br />
二、J2EE设计模式
一个设计模式描qC(jin)对于特定设计问题被验证的解决Ҏ(gu)Q它l合?jin)所有开发者对q个问题所在领域的知识和见解;同时也是对于常见问题的可重用Ҏ(gu)Q它们一般适用于单个问题,但是l织在一起就可以提供整个企业pȝ的解x案。下面我们列丑օU常用于J2EEq_的设计模式,q对每种模式作简单的介绍Q便于大家学?fn)、理解与灉|应用?br />
1、前控制?br />
前控制器(front controller)主要提供一U可以集中式理h的控制器Q一个前控制器可以接受所有的客户hQ将每个h递交l相应的h句柄Qƈ适当地响应用戗?br />
前控制器也是表示层的设计模式Q它的出C要是׃表示层通常需要控制和协调来自不同用户的多个请求,而这U控制机制又Ҏ(gu)不同的需要,可能?x)集中式控制或分散式控制。换句话_(d)是应用pȝ需要对于表C层的请求提供一个集中式控制模块Q以提供各种pȝ服务Q包括内Ҏ(gu)取、视囄理和览Q如果系l中没有q种集中式控制模块或控制机制Q每个不同的pȝ服务都需要进行单独的视图处理Q这样代码的重复性就?x)提高,致ɾpȝ开发代h高;同时Q如果没有一个固定模块管理视图之间的览机制Q致使其览功能下放于每个不同的视图中,最l必得系l的可维护性受到破坏;本文中我们主要讨论的是集中式控制模块Q而不是分散式控制Q因为前者更适合于大型的应用pȝ?br />
Z上面所说的问题Q研Ih员提Z(jin)前控制器的设计模式。在q种模式中,控制器提供一个处理不同请求的控制点,q里的处理工作包括安全事务、视N择、错误处理和响应内容的生成;通过这些处理工作集中在一点进行,大大地减低了(jin)Java代码量,同时q种Ҏ(gu)也可以减在视图模块的程序逻辑Q保证了(jin)在不同请求之间可以重用大量的逻辑代码。通常Q控制器都是和一个分z件联合工作的Q分z件主要是用于视图理和浏览,也就是ؓ(f)用户选择下一个应该显C的视图Qƈ同时提供对于相关昄资源的控制。分z件可以包含在控制器之内,或是在另外一个单独的lg中;虽然前控制器模式推荐对于全部的请求用统一处理Q但是它也没有限制在一个系l中只能h一个控制器Q在pȝ中的每个层次都可以具有多个控制器Qƈ且映至不同的系l服务,下图2昄?jin)前控制器的cd?br />

? 前控制器的类?/center>
?昄?jin)前控制器的序列图,表示一个控制器如何处理相关的请求?br />

?前控制器序列?/center>
下面我们来讨Z下图3的各个组件?br />
2、控制器
控制?controller)是负责处理各U客戯求的控制点,q可以将一定的职能(如用戯证等)下放l帮助类?br />
(1)分派lg(Dispatcher)。一个分z件主要是用于视图的管理和览Qؓ(f)用户选择下一个可以显C的视图Qƈ理相关的显C源;分派lg可以在一个控制器内运行,或者作Z个单独的lg与控制器协同工作Q开发h员可以在分派lg中实现静(rn)态的视图分派技术,或是复杂的动态分z?br />
(2)帮助c?Helper)。帮助类负责帮助一个视图或控制器来完成其处理工作,因此Q帮助类h多项职责Q包括收集数据、存储中间数据模型等Q另外,帮助cM可以在保证数据完整性和准确性的情况下,Z同显C需求修Ҏ(gu)据模型;也就是说Q根据用L(fng)hQ帮助类可以向视图提供未l处理的原始数据Q或是已l格式化后的Web内容Q一个视囑时可以和多个帮助cd同工作,而后者通常是由JavaBeans和标{?tag)实现的?br />
3、视?br />
视图(view)负责向用hCZ息,而帮助类则负责支持视囄工作Q即打包和徏立相应的数据模型Q下面我们介l几U可以实现控制器的方法?br />
1Q基于Servlet前控制器
q种Ҏ(gu)使用servlet来实C个控制器Q尽在语法上相差无几,但是它比使用JSP来实现要优越一些;因ؓ(f)控制器所q行的请求处理,多数都是与程序运行和控制动相关的,q些处理工作虽然与显C模式相养I但是实际上是逻辑独立的,所以它们更适合在servlet中实玎ͼ而不是JSP技术中Q用这U方法也存在一些弱点,比如说servlet无法使用JSPq行环境的资源,如请求参数等Q但是这个弱点也不是不能解决的,我们可以在servlet中徏立相关的句柄来访问同L(fng)资源Q当然其代码?x)变得繁琐一炏V?br />
2Q基于JSP的前控制?br />
q种Ҏ(gu)使用JSP面实现控制器,管语法上相同,但是ServletҎ(gu)要比其优一些;因ؓ(f)控制器所处理的逻辑一般都不是有关昄模式的,所以在JSP面中实现控制器g有点风马牛不相及(qing)Q用这U方法也不利于开发团队的角色和职责的分配Q即软g开发h员需要在负责昄逻辑的JSP面中修改请求处理的代码Q通常Q这U工作都是相当复杂的Q尤其考虑整个JSP面的编E、编译、测试和调试错误?br />
3Q控制器之中的分z?br />
如果分派lg没有较多功能Q开发h员可以在控制器实现该lg?br />
4Q基前端
Z使用servlet实现前控制器Q这U方案徏议实C个控制器作ؓ(f)基础c,q样其他的控制器可以在其之上扩展Q这个基cd以包含一些通用的逻辑实现Q它的子cd?x)重载这些实C码,q种Ҏ(gu)也有一定的~陷Q当有许多子cȝ承这个基c,q大量地重用代码Ӟ那么有可能出现一个类的改变会(x)影响到所有子cȝ情况?br />
5Q用qo(h)器实现前控制?br />
qo(h)器提供了(jin)与用戯求的中心(j)处理相类似的功能Q也是_(d)控制器的一些功能可以由qo(h)器来实现Q这U方案的qo(h)器主要负责处理请求的截取和解释,而不是请求的处理和响应的生成Q通常可以为应用系l提供一个核?j)控制点Q以处理所有的pȝ服务和程序逻辑Q核?j)控制也p明了(jin)所有的h都可以简单地被跟t和记录Q从而方便各U服务功能的实施Q当?dng)它也存在一些缺点,一个核?j)控制点的小问题可能会(x)引发系l的崩溃Q但在应用系l的实际开发中Q这q不是个问题Q因为通常我们都会(x)在同一个层面上实现多个控制器,从而避免了(jin)q个~陷Q在控制器中Q开发h员可以很方便地实C个检查安全机制的lgQ从而可以在最外层屏蔽对系l的恶意讉KQ另外用控制器也会(x)提高pȝ模块的可重用性,其在控制器同时使用帮助cȝ时候?br />
4、视囑ָ?br />
视图帮助(View helper)是属于表C层的设计模式,一个视囑ָ助可以包含相兌图中的数据访问和内容昄的逻辑Qƈ可以_化视图;昄逻辑主要是关于如何格式化面上的数据Q而访问逻辑则是关于如何取出数据Q视囑ָ助通常用来昄数据的JSP标记(tag)或是d数据的JavaBean?br />
q种设计模式的出C要是׃目前的应用系l通常需要实时地开发显C内容,q且能处理动态的E序数据。如果这些程序数据的讉K逻辑和显C逻辑的关p过于紧密,则系l的表示层就?x)经帔R要改动,从而系l的灉|性、重用性会(x)大大地受到破坏;同时在相同的模块中实现访问逻辑和显C逻辑会(x)影响pȝ的模块化
]]>
վ֩ģ壺
°|
|
Ϫ|
|
ĵ|
|
|
ѭ|
|
ന|
|
绯|
ͬ|
ɽ|
ӥ̶|
غ|
|
տ|
ƽ|
|
Դ|
ƽ|
пѷ|
|
ϰ|
|
ʳ|
|
|
|
½|
ݸ|
崲|
ϲ|
̨|
ƽ|
̳|
|
ƺ|
Ѱ|
ɽ|