JAVA网页编程之JavaServer Faces框架利用的计划形式
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。server|计划 本文中,作者AnandJoshi利用JSF框架中的计划形式阐释了JavaServer™Faces(JSF)系统布局。他会商了JSF系统布局中利用的GoF计划形式,和这些形式在JSF框架中的感化。任何对计划形式和JSF系统布局有必定懂得的人都能从Anand具体的先容中有所劳绩。*读者应当对GoF计划形式和JSF手艺有很好的懂得。计划形式能够匡助用户在更高条理上笼统细节,更好地舆崩溃系布局。假如对照熟习GoF计划形式和JavaServerFaces(JSF)框架,本文能够匡助您洞察JSF框架中利用的计划形式,深切了解其事情道理。
本文切磋了JSF框架中利用的计划形式。具体会商的计划形式包含Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和Observer形式。
计划形式和JavaServerFaces(JSF)手艺
起首扼要地先容一下形式和JSF框架。
[*]形式。计划形式是对成绩息争决计划举行笼统的广泛合用的办法。由于形式是一切开辟职员和架构师公认的,以是形式能够勤俭工夫和资本。用内行话来讲,形式就是关于某团体所共知的成绩的经由考证的办理计划。形式能够重用,重用使得办理计划更强健。
[*]JavaServerFaces。JSF系统布局是一种Web使用程序框架。它是JavaCommunityProcess(JCP)推进的,无望成为Web使用程序开辟的尺度框架。今朝用于开辟Web使用程序的框架有50多个,这申明急切必要完成框架的尺度化,这恰是JSF框架的方针!
深切分析JSF形式
如今我们来会商JSF系统布局中的各类计划形式。本文将具体会商Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和Observer计划形式。我将剖析每种形式的用处及其在JSF框架中的感化。
Singleton形式
Singleton形式的目标是包管类只要一个实例被加载,该实例供应一个全局会见点。当启动具有JSF撑持的Web使用程序时,Web容器初始化一个FacesServlet实例。在这个阶段,FacesServlet对每一个Web使用程序实例化Application和LifeCycle实例一次。这些实例就接纳尽人皆知的Singleton形式,一般只必要该范例的一个实例。
利用JSF的Web使用程序只必要Application和LifeCycle类的一个实例。LifeCycle办理多个JSF哀求的全部性命期。由于其形态和举动在一切哀求之间共享,这些对象接纳Singleton形式通情达理。LifeCycle保护的PhaseListeners也是Singleton形式的。PhaseListeners由一切JSF哀求共享。在JSF框架中能够普遍利用Singleton形式,以削减内存占用和供应对象的全局会见。NavigationHandler(用于断定哀求的逻辑了局)和ViewHandler(用于创立视图)也是利用Singleton形式的例子。
Model-View-Controller(MVC)
MVC形式的目标是从数据暗示(View)中将数据(即Model)分别出来。假如使用程序有多种暗示,能够仅交换视图层而重用把持器和模子代码。相似的,假如必要改动模子,能够在很年夜水平上不改动视图层。把持器处置用户举措,用户举措大概形成模子改动和视图更新。当用户哀求一个JSF页面时,哀求发送到FacesServlet。FacesServlet是JSF利用的前端把持器servlet。和其他良多Web使用程序框架一样,JSF利用MVS形式打消视图和模子之间的耦合。为了会合处置用户哀求,把持器servlet改动模子并将用户导航到视图。
FacesServlet是JSF框架中一切用户哀求都要经由的把持器元素。FacesServlet剖析用户哀求,利用托管bean对模子挪用各类举措。背景(backing)或托管(managed)bean就是该模子的例子。JSF用户界面(UI)组件是视图层的例子。MVC形式把义务分化给具有分歧妙技的开辟职员,使这些义务可以同时举行,如许GUI计划职员就能够利用丰厚的UI组件创立JSF页面,同时后端开辟职员能够创立托管bean来编写专门的营业逻辑代码。
FactoryMethod形式
FactoryMethod形式的目标是界说一个用于创立对象的接口,可是把对象实例化推延到子类中。在JSF系统布局中,FactoryMethod形式被用于创立对象。LifeCycleFactory是一个创立和前往LifeCycle实例的工场对象。LifeCycleFactory的getLifeCycle(StringLifeCycleId)办法接纳FactoryMethod形式,依据LifeCycleId创立(假如必要)并前往LifeCycle实例。自界说的JSF完成能够从头界说getLifeCycle笼统办法来创立自界说的LifeCycle实例。默许的JSF完成供应默许的LifeCycle实例。别的,关于每一个JSF哀求,FacesServlet都从FacesContextFactory失掉FacesContext。FacesContextFactory是一个笼统类,公然了getFacesContextAPI,JSF完成供应了FacesContextFactory和getFacesContextAPI的详细完成。这是别的一个利用FactoryMethod形式的例子,详细的FacesContextFactory完成创立FacesContext对象。
State形式
State形式的目标是在暗示形态的分歧类之间分派与形态有关的逻辑。FacesServlet对LifCycle实例挪用execute和render办法。LifeCycle和谐分歧的Phrase以便实行JSF哀求。在这里JSF完成就遵守了State形式。假如没有利用这类形式,LifeCycle完成就会被大批的前提(即“if”语句)搅得乌烟瘴气。JSF完成为每一个形态(或阶段)创立独自的类并挪用step。phase是一个笼统类,定了每一个step的大众接口。在JSF框架中界说了六个phrase(即step):RestoreViewPhase、ApplyRequestValues、ProcessValidationsPhase、UpdateModelValuesPhase、InvokeApplicationPhase和RenderResponsePhase。
在State形式中,LifeCycle把FacesContext对象传送给phase。每一个阶段或形态改动传送给它的高低文信息,然后设置FacesContext自己中的标记标明下一个大概的步骤。JSF完成在每一个步骤中改动其举动。每一个阶段都能够作为下一个阶段的原因。FacesContext有两种标记renderResponse和responseComplete能够改动实行的按次。每一个步骤实行完成后,LifeCycle反省上一阶段是不是设置了这些标记。假如设置了responseComplete,LifeCycle则完整保持哀求的实行。假如经由某个阶段后设置了renderResponse标记,JSF就会跳多余下的阶段而间接进进RenderResponse阶段。假如这两个标记都没有设置,LifeCycle就会按按次持续实行下一步。
Composite形式
Composite形式让客户代码可以一致处置复合对象和基础对象。复合对象是基础对象的容器。在第一阶段(RestoreView阶段)和最初一个阶段(RenderResponse阶段),利用JSFUI组件机关UIView。UIComponentBase就是Composite形式中Component笼统类的一个例子。UIViewRoot是Composite类,而UIOutput(例如说)就是叶子(大概基础类)。UIComponentBase类界说了叶子和复合对象的大众办法,如编码/解码值和子节点办理函数。子节点办理函数,如getChildren,关于叶子节点前往空列表,关于复合节点则前往其子节点。
Decorator形式
Decorator形式的目标是欠亨过子类化静态扩大对象的举动。JSF框架有良多扩大点(便可拔出机制)。JSF完成可以使用Decorator形式交换默许的PropertyResolver、VariableResolver、ActionListener、NavigationHandler、ViewHandler或StateManager。一般自界说完成承受经由过程机关函数传送给它的默许完成的援用。自界说完成仅仅改写功效的一个子集,而将其他功效托付给默许完成。假如但愿完成自界说的ViewHandler,改写默许ViewHandler完成的calculateLocale办法,能够像清单1那样编写CustomViewHandler类:
清单1.CustomViewHandler片断
publicclassCustomViewHandlerextendsViewHandler{publicCustomViewHandler(ViewHandlerhandler){super();oldViewHandler=handler;}privateViewHandleroldViewHandler=null;publicvoidrenderView(facesContextcontext,UIViewRootview){//delegatemethodtooldViewHandleroldViewHandler.renderView(context,view);}//customimplementationofcalculateLocalepublicLocalecalculateLocale(FacesContextcontext){}}
Strategy形式
Strategy形式的目标是封装分歧的观点。JSF框架接纳Strategy形式利用托付完成模子出现UI组件。JSF手艺撑持两种出现模子。在间接完成模子中,UI组件对收到的哀求中的数据举行解码,然后编码这些数据举行显现。在托付完成模子中,解码和编码操纵托付给和组建联系关系的专门出现器。后一种模子使用了Strategy计划形式,比间接完成更天真。在Strategy形式中,将分歧的算法封装在独自的对象中,从而能够静态地改动算法。JSF完成能够用已有的renderkit实例注册别的的出现器,当使用程序启动的时分,JSF完成读取设置文件将这些出现器和UI组件接洽在一同。
TemplateMethod形式
TemplateMethod形式的目标是将变更的步骤推延到子类中,而在父类中界说那些流动的算法步骤。JSF框架经由过程PhraseListeners展示了TemplateMethod形式供应的功效。接纳TemplateMethod(大概“hook”)使得Web作者能够为分歧阶段之间的可选步骤供应完成,而次要阶段仍旧和JSF框架的界说分歧。JSF框架供应了PhaseListeners,观点上相似于TemplateMethod形式中的可变步骤。JSF框架有六个预界说的阶段,在每一个阶段之间,Web作者能够完成PhaseListeners来供应相似于TemplateMethodhook的hook。现实上,这类布局比TemplateMethod形式更具有扩大性。能够经由过程注册PhraseId为ANY_PHRASE的PhaseListener在每一个阶段后供应hook。假如PhaseId是ANY_PHASE,JSF完成就会在每一个阶段之前和以后挪用该PhaseListener。JSF框架中的完成略有分歧,由于能够基本没有PhaseListener,可是在TemplateMethod形式中,子类一般从头界说父类中笼统的可变步骤。
Observer形式
Observer形式的目标是当方针对象的形态改动时主动关照一切依附的对象(即察看器)。JSF在UI组件中完成了Observer形式。JSF有两类内建事务:ActionEvent和ValueChangedEvent。ActionEvent用于断定用户界面组件(如按钮)的激活。当用户单击按钮时,JSF完成关照增加到该按钮上的一个或多个举措监听程序。因而该按钮被激活,大概说按钮(主体)的形态改动了。增加到按钮上的一切监听程序(即察看器)都收到关照该主体形态已改动。相似的,当输出UI组件中的值改动时,JSF完成关照ValueChangeListener。
停止语
JSF框架使用了Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和Observer计划形式。由于它的系统布局创建在已考证的计划形式的基本上,这是一个强健的框架,形式在JSF框架中失掉了很好的使用。
参考材料
进修
[*]您能够参阅本文在developerWorks环球站点上的英文原文。
[*]请会见GangofFourDesignPatterns进一步懂得这些计划形式。
[*]请浏览“嫌疑论者的JSF:JSF使用程序的性命周期”进一步懂得JavaServerFaces框架(developerWorks,2005年3月)。
[*]请会见developerWorksJava手艺专区。这里专门宣布各类基于Web和Java的办理计划的文章和教程。
取得产物和手艺
[*]从SunDeveloperNetwork收费下载JSF
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 是一种为 Internet发展的计算机语言 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
页:
[1]