网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  选择 jsf不选struts的十大理由     
  文章作者:未知  文章来源:水木森林  
  查看:55次  录入:管理员--2007-11-17  
 
  我的一个客户不知道该选用struts还是jsf。就像你预料的那样,我通常会问:这2中框架之间有什么区别?当然,除了我的这个客户外很多人都面临这样的选择。
  
  总的来说,我建议在新项目中优先考虑jsf。虽然常常有一些商业上的因素迫使我们为现有的项目选择了struts,而且那些解决方案还有待考验,但是,让我们面对一个事实:jsf比struts好多了。
  
  下面是我选择jsf而不选struts的十大理由:
  
  1.components(组件)
  2.render kits
  3.renderers
  4.value binding expressions(值绑定表达式)
  5.event model(事件模型)
  6.extensibility(可扩展性)
  7.managed beans(dependency injection 依赖注入)
  8.pojo action methods
  9.jsf is the standard java-based web app framework (jsf是java web应用程序的标准框架)
  10.there's only one struts(只有一个struts)
  
  10.there's only one struts(只有一个struts) struts 是一个开源产品,然而jsf是一个标准。这个细节常常被新的jsf学习者忽略,其实这是显而易见的,因为我们有多个jsf的实现。虽然jsf还很不成熟,但是我们已经有了2个优秀的jsf实现可以选择:sun的参考实现和apache的myfaces。另一方面,我们只有一个struts。
  9.jsf is the standard(jsf是标准) jee 5.0要提供一个jsf的实现,这表明jsf不久将会无处不在。这可能与你无关,但是和工具供应商密切相关。现在大概有50个java web应用程序框架,工具供应商不会情愿去支持一个特别的框架,但是他们会毫不犹豫的去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在jsf的四周,争先恐后的去实现相同的功能。比如说,直到我们去实现本质上和shale的tapestry差不多的视图的时候,我才知道facalets。(从长远来看,我相信这种冗余是件好事,会给我们带来好处)
  8.pojo action methods struts的行为是和 struts的api绑定在一起的,但是jsf的行为方法可以在pojpo中实现。这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在jsf里面没有行为对象,行为在模型对象中实现。但是也请注意一点:如果你愿意你也可以生成与jsf独立的行为对象。在struts里面,你有 form bean和action bean。form bean包含数据而action bean包含逻辑。oo狂会想去合并前2者,在struts你办不到。但是在jsf中,你可以分开数据和逻辑,也可以合并到一个对象中,一切由你决定。
  7.managed beans(dependency injection 依赖注入) 和spring一样,jsf也使用了依赖注入(dj)(或控制反转(ioc))去实例化和初始化bean。struts的确为你生成了form bean和action bean,但是jsf可以为你生成各种各样的managed bean。
  6.extensibility(可扩展性) 这个很重要。jsf有6个对象实现了这个框架的大部分功能,而且你可以很容易的用你自己的实现代替原有实现。比如你想加一个自定义参数在jsf表达式语言里面,或是添加一个自己的视图控制器以便于区分组件和html。事实上shale实现了上面的功能。如果你还没有满足,jsf提供了几个地方你可以轻松的控制jsf的生命周期。shale给你的会更多。
  5.event model(事件模型) jsf的事件模型使你可以对值改变,动作,jsf生命周期阶段变换等作出反应。在jsf1.1中,那些事件都是在服务器端处理的,这肯定是一个缺陷,好在jsf2.0计划支持客户端事件,拭目以待吧。
  4.value binding expressions(值绑定表达式) 在struts 中,你负责把数据从form传递到模型对象。你实现的action的execute方法是把form作为一个参数。然后你再手动的把数据从form bean里面取出放到模型对象里面。你要为应用里面的每个form做这些事情,然而在jsf里面,你只需像这样:#{model.property} 就够了,其他的交给jsf来处理。
  3.renderers 你有看过struts的标签的源代码吗?它直接生成html。jsf组件标签什么都不生成,它和服务器上的一对component-renderer对应。component维护组件状态,rendered负责获得视图。重点是renderers是可插拔的,即你可以根据自己需求实现然后替代掉默认实现。比如说我在nfjs上面的felix谈话中举例说明了怎么去实现一个自定义的label renderer。你只需要配置你的renderer,jsf就会自动在你的应用程序里面使用他。
  2.render kits 在几年前我曾经有份struts咨询工作,我们必须同时支持浏览器和无线设备,非常痛苦。但是用jsf来完成那个任务非常容易,因为你可以生成你自己的render kit-为一种特定显示技术的renderers的集合-然后配置到jsf里面。
  1.components(组件) 组件是struts和jsf之间最大的区别。就像swing一样,jsf提供丰富的底层构件去开发组件然后添加到标准的组件集。那些底层构件让你很容易的生成自己的组件并且和别人共享。现在我们到处都能看到自定义组件跳出来,比如说oracle的adf和myfaces,两者都提供了丰富的组件集,就像 javascript日历,tree等等。当然,组件只是一部分。典型的是,组件都和一个独立的renderer对应,这给我们带来了真正的好处(看第3 条)。但是和jsf中的很多东西一样,你不一定要墨守成规。只要你愿意,你可以实现render自己的组件,虽然这样你会失去给组件加入别的 renderer的能力。
 
 
上一篇: java框架:struts 的动态复选框    下一篇: struts网站导航系统设计新思路探讨
  相关文档
short,int,long与byte数组之间的转换 01-03
servlet规范定义的servlet 生命周期 11-17
weblogic8中文显示乱码解决办法 11-17
新手入门:对j2ee初学者的学习流程介绍 11-16
applet用http隧道技术和servlet通讯 (源码) 11-17
蔡学镛谈“linux + java 会得到什么” 11-16
jboss技术支持文档 11-17
基于websphere mq的收发消息程序 11-16
在easyjweb使用spring容器 11-17
gel:号称世界上最轻巧的java ide 11-17
java+xml将数据导入sql server中 11-16
java、xml与数据库编程实践(二) 11-16
轻松使用线程:不共享有时是最好的 11-17
迁移到 eclipse: eclipse 对 jbuilder 评估开发指南 11-17
在web应用中动态创建pdf文件 11-16
java socket编程(五)简单的web服务器 11-16
java经典问题大集合 11-17
struts 的汉字显示问题终结解决方案 11-17
ejb的困惑:组件与可重用性的矛盾 11-17
java学习的捷径 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息