马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net并驾齐驱的js|对照 Struts/Tapestry/JSF是今朝J2EE体现层新老组合的框架手艺。从出生工夫上看,Struts应当对照早,利用得十分普遍,Tapestry3.0渐渐引发普遍的器重,合法Tapestry行将大显神通时代,SUN推出JSF尺度手艺,固然JSF一入手下手推出尚不成熟,留出了一段空缺期,可是跟着JSF1.1尺度推出,JSF入手下手正面反击,粉面盛大退场了。 实在,JSF和Tapestry也并非那种头见面的不异合作性手艺,二者仍是各有偏重点的,不外对照渺小,可是这类渺小点在完成一个年夜工程时大概带来分歧的感觉和变更。
起首,我们从一个高度来笼统一下体现层框架应有的手艺架构,下图能够说一切体现层框架手艺都必需完成的功效架构图:
固然,我们不用空话罗嗦MVC形式,MVC形式是基准形式,如今框架手艺已不用再拼是不是是MVC形式了。在上图MVC形式基本上,一个体现层框架无外乎要完成图中的三个功效:
1.在以后页面可以显现一个组件对象的内容;而不是象纯JSP那样,必要在Jsp页面写进“挪用对象办法”的Java代码。
2.当用户按下页面的提交按扭或链接后,事务产生,这时候应当触发服务器端并将以后页面的参数提交给服务器。这类机制体现在Form表单提交和有参数的链接<ahref=""></a>
3.从一个页面视图间接跳转到别的一个页面视图,纯真的导航感化。
我们经由过程下表来对照这三种框架在完成上图各个功效时手艺细节,从而得出他们的异同点和侧重点。
StrutsTapestry3.0JSF在View显现的组件请求组件必需承继ActionForm
分显式挪用和隐式挪用
组件必需承继BaseComponent一般POJO
无需承继
ManagedBean组件在View显现粒度View页面只能显现与表单对应的ActionForm,设置中ActionActionForm页面一样平常只能1:1:1干系。可将组件嵌进页面任何一行,对利用组件数目无穷制。同Tapestry页面分区tiles利用Tiles标签库完成,必要别的tiles-def.xml设置文件组件有本人的视图页面,经由过程挪用组件即间接完成多个页面组合。壮大天然的页面组合是其特性。经由过程组件+标签库完成Subview,但如需重用Layout,还要分离Tiles.页面跳转利用标签库html:link中写明方针URL,URL称号必要对比设置文件的path定名,与组件Action耦合。URL称号是方针的组件称号,不触及URL和路径等操纵,便利安定。相似Struts,也必要在设置文件中查找,与组件分别。参数传送利用html:link时传送参数凌驾一个以上处置贫苦。间接挪用组件,间接付与参数,没有参数个数限定参数分别传送给组件事务触发经由过程表单提交submit激活,不克不及细化到表单里字段。可以给于表单每一个字段贴一个事务,事务组件必需完成PageListener接口同Tapestry,事务组件必需练习ActionListener接口 Struts组件编程模子
Struts完成组件编程时有一些庞大:常常为一个页面中必要引进多个组件而头疼,由于Struts中没法间接引进多个组件,必需绕一些圈子:
一样平常分两种情形:假如统一个Action就能够凑合这些组件,那末在这类情形下有两个举措:
1.将这多个组件装进一个ActionForm中,如利用MapForm等机制;
2.手工将多个组件装进request/session等scope中,然后依据其称号在jsp中取得。
这两个办法都出缺点:第一种举措常常一个ActionForm弄得改头换面,酿成一个年夜杂烩,违背了OO分拨封装的准绳;第2种举措实在又回到jsp编程;
第二种情形,假如这些组件必需有事后由分歧的Action来处置,每一个组件必需经由Action-->ActionForm流程,在这类情形下有两种举措:
1.利用Tiles,分歧流程输入到统一个页面的分歧地区。是一种并行处置体例。
2.对多个流程首尾相连,第一Actionforward了局是第二个Action,最初输入一个Jsp,在这个jsp中就能够利用后面多个流程的多个ActionForm了,这属于串行体例。
Struts组件模子弱点
Struts组件编程必需限制在Action/ActionForm/JSP这三个框框中做文章,难度绝对对照年夜,而Tapestry/JSF则没有太多这些手艺框框限定,二者在组件编程方面更让编程者自在一些,便利一些,这也是组件型框架的上风吧。
Struts标签库
在Struts中,常常必要利用标签库来显现组件ActionForm中内容,这就触及到一个分离的成绩,标签库是他人写的,参考Struts的标签库用法,而组件是本人的,难度和贫苦就表现在这个分离点上。
JSF基础思绪和Struts差未几,只不外换了分歧标签库,也必要标签库+组件的分离思索,不外由于组件这里是通用组件,没有甚么限定,以是如许比Struts要轻松一些。
Tapestry利用了组件库观点替换了标签库,没有标签库观点,如许就没有标签库和本人的组件必要分离的成绩,都是组件的利用,组件平分Tapestry尺度组件和本人界说的组件,这也是打仗了Jsp系统的人进修Tapestry面对的一个思绪转换。
详细以页面跳转为例子,页面跳转是靠链接<ahref="方针"></a>完成,链接是页面常常利用的元素。
Struts供应的html:link在频仍利用就出格不便利,特别在传送多个参数时:个中html:link的page值,是跳转对方页面或Action的path,这个path一样平常必要到struts-config.xml查找Action的响应path,一旦设置文件path值修正,触及到这个一切相干页面都要修正。
JSF将链接观点分别两个方面:导航性子和事务激活,在导航方面仍是必要到设置faces-config查询Navigation的from-outcome的值。
因为Tapestry没有标签库观点,只要组件或页面两个观点,因而,链接跳转方针要末是组件,要末是页面,简便复杂,它没有过剩的path观点,就是组件名,也就是对象称号,组件称号和path称号合二为一。
总结
JSF在很年夜水平上相似Struts,而不是相似Tapestry,能够说是一种Struts2.0,都是接纳标签库+组件的情势,只是JSF的组件观点没有象Struts那样必需承继ActionForm的限定;JSF在事务粒度上要精致,不象Struts那样,一个表单一个事务,JSF能够细化到表单中的每一个字段上。
JSF只要在组件和事务机制这个观点上相似Tapestry,可是不似Tapestry那样是一个完整组件的框架,以是,假如你做一个对页面请求天真度相称高的体系,选用Tapestry是第一思索。
Struts/JSF则合适在一样平常的数据页面录进的体系中,关于Struts和JSF的选用,我今朝团体概念是:假如你是一个新的体系,能够间接从JSF入手下手;假如你已利用Struts,不用转换,假如必要切换,能够将JSF和Tapestry一同思索。
别的,JSF/Tapestry不但是撑持Html,也撑持多种客户端言语如WML或XUI等。
这三者之间干系:假如说Struts是右派;那Tapestry则是左派;而JSF则是两头派,中庸主义是SUN同盟的一向战略。
固然,你也能够宣布你在理论中这三者任何一个的利用感觉,以使得厥后者有一个对照。
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。 |