|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。
Struts作为MVC2的Web框架,自推出以来不休遭到开辟者的追捧,失掉普遍的使用。作为最乐成的Web框架,Struts天然具有浩瀚的长处:MVC2模子的利用、功效完全的标签库(TagLibrary)、开放源代码。
可是,正所谓“没有最好,只要更好”,Struts1.x本身也有很多的弱点:必要编写的代码过量,简单引发“类爆炸”、单位测试坚苦。这些弱点跟着Web的开展愈来愈分明。这就促生了Struts2,它的出生能很好的办理上述成绩。
在本文中,笔者将对Struts2和Struts1.x这两种框架举行具体的对照。对照将触及到这两种框架的Action、考证、范例转换及怎样开辟等方面的内容。但愿经由过程如许的对照,让读者懂得这两种框架各自的特性,以便于在本人的项目中,依据实践情形,尽快的过渡到Struts2的时期。本文的内容基于Struts2.0.6。
1、弁言
Struts的第一个版本是在2001年5月份公布的。它的最后假想是经由过程分离JSP和Servlet,使Web使用的视图和营业/使用逻辑得以明晰地分别开来。在Struts之前,最多见的做法是在JSP中到场营业和使用逻辑,大概在Servlet中经由过程println()来天生视图。
自从初版公布以来,Struts实践上已成为业界公认的Web使用尺度。它的炙手可热也为本人带来了改善和变动,以是不仅要跟上对Web使用框架不休变更的需求,并且要与日渐增加合作剧烈的浩瀚框架的特征相交融。
到最初,发生了几个下一代Struts的办理计划。个中两个最受注目的计划是Shale和StrutsTi。Shale是一个基于构件的框架,并在比来成为Apache的顶级项目。而StrutsTi则是在Struts的乐成履历基本上持续保持对前端把持器(FrontController)和MVC(model-view-controller)形式举行改善。
WebWork项目是在2002年3月公布的,它对Struts式框架举行了反动性改善,引进了很多新的头脑、观点和功效,但和原Struts代码其实不兼容。WebWork是一个成熟的框架,经由了好几回严重的改善与公布。
在2005年12月,WebWork与StrutsTi公布兼并。与此同时,StrutsTi更名为StrutsActionFramework2.0,成为Struts真实的承继者。
最初要注重的是,并非说Struts或WebWork项目已中断开辟了。因为人们对这两个项目标乐趣仍旧很高,并且也有良多开辟者仍旧乐意利用它们,因而这两个项目还在持续开辟中,持续修复Bug,改善功效和持续增加新功效。
2、Action的区分
关于有着丰厚的Struts1.x开辟履历的伴侣来讲,都非常的分明Action是全部Struts框架的中心内容,固然Struts2也不破例。不外,Struts1.x与Struts2的Action模子很年夜的区分。
Struts2和Struts1.x的不同,最分明的就是Struts2是一个pull-MVC架构。这是甚么意义呢?从开辟者角度看,就是说必要显现给用户的数据能够间接从Action中猎取,而不像Struts1.x那样,必需把响应的Bean存到Page、Request大概Session中才干猎取。Struts1.x必需承继org.apache.struts.action.Action大概其子类,表双数据封装在FormBean中。Struts2不必承继任何范例或完成任何接口,表双数据包括在Action中,经由过程Getter和Setter猎取(以下面的ActionForStruts2的代码示例)。
固然,在实际上Struts2的Action不必完成任何接口大概是承继任何的类,可是,在实践编程过程当中,为了加倍便利的完成Action,年夜多半情形下城市承继com.opensymphony.xwork2.ActionSupport类,而且重载(Override)此类里的Stringexecute()办法。以下所示:
packageActionDiffer;
importjava.text.DateFormat;
importjava.util.Date;
importcom.opensymphony.xwork2.ActionSupport;
publicclassActionForStruts2extendsActionSupport ...{
privateStringmessage;
publicStringgetMessage() ...{
returnmessage;
}
@Override
publicStringexecute() ...{
message="Thisishellofromstrtuts2.Nowis:"+DateFormat.getInstance().format(newDate());
returnSUCCESS;
}
}
起首,从ActionForStruts2能够看出,前往的对象不是ActionForward,而是String。假如你不喜好以字符串的情势呈现在你的代码中,有个Helper接口Action能够以常量体例供应罕见了局,如“success”、“none”、“error”、“input”和“login”。
别的,依照常规,在Struts1.x中只要“execute”办法能挪用Action, 但在Struts2中并不是需要,任何声明为publicStringmethodName()办法,都能经由过程设置来挪用Action。
最初,和Struts1.x最年夜的反动性的分歧是,Struts2处置Action过程当中挪用的办法(“execute”办法)是不带参数的。那怎样猎取所必要的对象呢?谜底是利用IoC(反转把持,InversionofControl),也叫“依附注进(DependencyInjection)”的形式(想更多地懂得这方面信息请看MartinFowler的文章http://www.martinfowler.com/articles/injection.html)。Spring框架使得这个形式盛行起来,但是Struts2的前身(WebWork)也同时使用上了这个形式。
<p>
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 |
|