??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 GMT60J2EE体系l构设计Q?Q?/title><link>http://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html</link><dc:creator>氧气中毒</dc:creator><author>氧气中毒</author><pubDate>Wed, 14 Jun 2006 07:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html</guid><wfw:comment>http://www.aygfsteel.com/kobe09/comments/52753.html</wfw:comment><comments>http://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kobe09/comments/commentRss/52753.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kobe09/services/trackbacks/52753.html</trackback:ping><description><![CDATA[  目前大多C业采用J2EE技术的l构设计与解x案。对于我们学?fn)和研究J2EE体系l构来说Q了(jin)解与掌握J2EE体系l构的设计方法及(qing)一些常用模式是必须的;模型-视图-控制(model-view-controlQ简UMVC)l构是目前最常见的J2EE应用所Z的体pȝ构,MVC主要适用于交互式的Web应用Q尤其是存在大量面?qing)多ơ客戯问?qing)数据昄Q相比较而言Q一个工作流体系l构更多应用于过E控制和较少交互的情况下Q除?jin)体pȝ构外QJ2EE的设计模式对我们解决应用pȝ的设计也有很大的帮助?br />  <br />  <b>一、J2EE的模?视图-控制QMVCQ体pȝ?/b><br />  模型-视图-控制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 />   <center> <img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://java.chinaitlab.com/imgfiles/2004.11.17.14.3.10.1.jpg" onload="return imgzoom(this,550)" /></center><br />   <center>? MVC 体系l构</center><br />  <br />  模型层负责表辑֒讉K商业数据Q执行商业逻辑和操作。也是_(d)q一层就是现实生zM功能的Y件模拟;在模型层变化的时候,它将通知视图层ƈ提供后者访问自w状态的能力Q同时控制层也可以访问其功能函数以完成相关的d?br />  <br />  视图层负责显C模型层的内宏V它从模型层取得数据q指定这些数据如何被昄出来。在模型层变化的时候,它将自动更新。另外视囑ֱ也会(x)用L(fng)输入传送给控制器?br />  <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 />  <br />  在模型层、视囑ֱ和控制层之间划分责Q可以减少代码的重复度Qƈ使应用程序维护v来更单。同时由于数据和商务逻辑的分开Q在新的数据源加入和数据昄变化的时候,数据处理也会(x)变得更简单?br />  <br />  <b>二、J2EE设计模式</b><br />  一个设计模式描qC(jin)对于特定设计问题被验证的解决Ҏ(gu)Q它l合?jin)所有开发者对q个问题所在领域的知识和见解;同时也是对于常见问题的可重用Ҏ(gu)Q它们一般适用于单个问题,但是l织在一起就可以提供整个企业pȝ的解x案。下面我们列丑օU常用于J2EEq_的设计模式,q对每种模式作简单的介绍Q便于大家学?fn)、理解与灉|应用?br />  <br />  1、前控制?br />  <br />  前控制器(front controller)主要提供一U可以集中式理h的控制器Q一个前控制器可以接受所有的客户hQ将每个h递交l相应的h句柄Qƈ适当地响应用戗?br />  <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 />  <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> <img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://java.chinaitlab.com/imgfiles/2004.11.17.14.3.19.2.jpg" onload="return imgzoom(this,550)" /></center><br />   <center>? 前控制器的类?/center><br />  <br />  ?昄?jin)前控制器的序列图,表示一个控制器如何处理相关的请求?br />   <center> <img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://java.chinaitlab.com/imgfiles/2004.11.17.14.3.29.3.jpg" onload="return imgzoom(this,550)" /></center><br />   <center>?前控制器序列?/center><br />  <br />  下面我们来讨Z下图3的各个组件?br />  <br />  2、控制器<br />  <br />  控制?controller)是负责处理各U客戯求的控制点,q可以将一定的职能(如用戯证等)下放l帮助类?br />  <br />  (1)分派lg(Dispatcher)。一个分z件主要是用于视图的管理和览Qؓ(f)用户选择下一个可以显C的视图Qƈ理相关的显C源;分派lg可以在一个控制器内运行,或者作Z个单独的lg与控制器协同工作Q开发h员可以在分派lg中实现静(rn)态的视图分派技术,或是复杂的动态分z?br />  <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 />  <br />  3、视?br />  <br />  视图(view)负责向用hCZ息,而帮助类则负责支持视囄工作Q即打包和徏立相应的数据模型Q下面我们介l几U可以实现控制器的方法?br />  <br />  1Q基于Servlet前控制器<br />  <br />  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 />  <br />  2Q基于JSP的前控制?br />  <br />  q种Ҏ(gu)使用JSP面实现控制器,管语法上相同,但是ServletҎ(gu)要比其优一些;因ؓ(f)控制器所处理的逻辑一般都不是有关昄模式的,所以在JSP面中实现控制器g有点风马牛不相及(qing)Q用这U方法也不利于开发团队的角色和职责的分配Q即软g开发h员需要在负责昄逻辑的JSP面中修改请求处理的代码Q通常Q这U工作都是相当复杂的Q尤其考虑整个JSP面的编E、编译、测试和调试错误?br />  <br />  3Q控制器之中的分z?br />  <br />  如果分派lg没有较多功能Q开发h员可以在控制器实现该lg?br />  <br />  4Q基前端<br />  <br />  Z使用servlet实现前控制器Q这U方案徏议实C个控制器作ؓ(f)基础c,q样其他的控制器可以在其之上扩展Q这个基cd以包含一些通用的逻辑实现Q它的子cd?x)重载这些实C码,q种Ҏ(gu)也有一定的~陷Q当有许多子cȝ承这个基c,q大量地重用代码Ӟ那么有可能出现一个类的改变会(x)影响到所有子cȝ情况?br />  <br />  5Q用qo(h)器实现前控制?br />  <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 />  <br />  4、视囑ָ?br />  <br />  视图帮助(View helper)是属于表C层的设计模式,一个视囑ָ助可以包含相兌图中的数据访问和内容昄的逻辑Qƈ可以_化视图;昄逻辑主要是关于如何格式化面上的数据Q而访问逻辑则是关于如何取出数据Q视囑ָ助通常用来昄数据的JSP标记(tag)或是d数据的JavaBean?br />  <br />  q种设计模式的出C要是׃目前的应用系l通常需要实时地开发显C内容,q且能处理动态的E序数据。如果这些程序数据的讉K逻辑和显C逻辑的关p过于紧密,则系l的表示层就?x)经帔R要改动,从而系l的灉|性、重用性会(x)大大地受到破坏;同时在相同的模块中实现访问逻辑和显C逻辑会(x)影响pȝ的模块化<img src ="http://www.aygfsteel.com/kobe09/aggbug/52753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kobe09/" target="_blank">氧气中毒</a> 2006-06-14 15:15 <a href="http://www.aygfsteel.com/kobe09/archive/2006/06/14/52753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">°</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĵ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ѭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ന</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">绯</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ӥ̶</a>| <a href="http://" target="_blank">غ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">пѷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank">ݸ</a>| <a href="http://" target="_blank">崲</a>| <a href="http://" target="_blank">ϲ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">̳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">Ѱ</a>| <a href="http://" target="_blank">ɽ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>