说明介绍struts2与struts1 x比较_第1页
说明介绍struts2与struts1 x比较_第2页
说明介绍struts2与struts1 x比较_第3页
说明介绍struts2与struts1 x比较_第4页
说明介绍struts2与struts1 x比较_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

Struts2Struts1的体系结构的差别巨大。Struts2WebWork为核心,采用拦截经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。此它不可能与这些视图层的模版技术进行整合。其次,Struts1ServletAPI的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1API,属于侵入性框架。从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和SpringMVC等。Struts1中吸取了经验,克服了很多Struts的发展。目前,Struts已经分化成了两个框架:第一个是在传统的Struts1WebWebWork的Struts2。Struts2Struts1的基Struts1WebWork两个框架。Struts1分化出来的另外一个框架是Shale。这个框架Struts1Struts1关联很少,使用了全新的设计思想。Shale更像一个新的框架而不是Struts1的升级。本文下面的内容将主要讨论Struts2。设计核心。Struts2ServletAPI分离。图一是Struts2的体系结构简图。6、处理业务(Action的execute()方法7、返回响应(execute方法将信息返回到8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪jsp页面)Struts2Struts2Struts1进行了巨大的改进。主要表现在如下几当然Struts2也不例外。不过,Struts1.x与Struts2的Action模型很大的区别。ActionStruts1.x那样,必须把相应的BeanPage、RequestSession中才能获取。Struts1.x必须继承org.apache.struts.action.Action或者中,通过Getter和Setter获取(如下面的ActionForStruts2的代码示例。载(Override)此类里的Stringexecute()方法。如下所示:packageimportjava.util.Date;importpublicclassActionForStruts2extendsActionSupport...{privateStringmessage;publicgetMessage()...{return}publicStringexecute()message="Thisishellofromstrtuts2.Nowis:"+DateFormat.getInstance().format(newDate());returnSUCCESS;}}另外,按照惯例,在Struts1.x中只有“execute”Action,Struts2中并非必要,任何声明为publicStringmethodName()方法,都能通过配置来调用Action。Struts1.x最大的革命性的不同是,Struts2Action过程中调用的方法(“execute”方法)是不带参数的。那如何获取所需要的对象呢?答案是使用IoC(反转控制,InversionofControl),也叫“依赖注入(DependencyInjection)”的模式(想更多地了解这方面信息请看MartinFowler的文章JohnsonJuergenHoeller合著的《Expertone‐on‐oneJ2EEDevelopmentwithoutEJBMartinFowler所写的《InversionofControlContainersandtheDependencyInjectionpattern》。自身有一套控制反转的实现,Webwork2.2在Spring框架的如火如荼发展的背景下,决定放弃控制反转功能的开发,转由Spring实现。值得一提的是,Spring确实是一个值得学习的框架,因为有越来越多的开源组件(iBATIS等)Spring重叠的功能的开发。因此,Struts2Spring实现控制反求HttpServerRequest对象。publicinterfaceServletRequestAware{}{privateHttpServletRequest{this.request=}//可以开始使用request}}Action对象实例,它并没有和其他请求共享一个对象,所以访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。Webwork的中文文档的解释为——Action调用的对象。它提供了一种机制可以actionaction执行前阻止其执行。同时也提供了一种可以提取action中可重用的部分的方式。Struts1.x的标准框架中不提供任何形式的拦截器,虽一个名为SAIF的附加项目则实现了这样的功能,Struts2的一个强有力的工具,有许多功能(feature)都是构建于它之上,如国际化、转换器,校验等。谈到拦截器,还有一个流行的词——拦截器链(InterceptorChainStruts2中称为拦截器器,如图1所示。Struts2已经提供丰富多样功能齐全的拦截器实现。读者可以到struts2‐all‐2.0.6.jarStruts2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts2自定义拦截器是相当容易的一件事。Action供一个名叫ActionSupport的基类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts2Action对象来使用。ServletStruts1.x的Action类依赖于servletAPI,当Action被调用时,以HttpServletRequestAction可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServletResponse。Struts1.xexecuteServletAPI这使得测试要依赖于容器。第三方的扩展,如StrutsTestCase,提供了一套Struts1的模拟对象(来进行测试。Struts2ActionStruts1.xActionFormActionActionForm必须扩展基类。因为JavaBeanActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用Struts2Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)rich对象类型。Actionwebtaglibs访问。Struts2ActionForm模式。rich对象类型,包括业务对象,能够用作输入/ModelDriventaglib对POJO输入对象的引用。Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--"ObjectGraphNotationLanguage"Struts1.x使用标准JSPStruts2使用“ValueStack”taglib能够访问值而不需要把你的页面(view)Struts1.xActionFormString。Struts1.xCommons‐Beanutils来进行类型转换。转义的校验和内容校验,来支持chain校验子属性Struts2支持通过拦截器堆栈(InterceptorStacks)Action创建不同的生命周期。堆栈能够根Action一起使用。5Struts2Struts2Struts1.xStruts2的基础有所了解了——包括高层的框架概念和基础的请求流程,并理解Struts1.x和Struts2两者之间在Action方面的差别,Struts2加强了对拦截器与

温馨提示

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

评论

0/150

提交评论