Apache Wicket(http://wicket.apache.org/)和Apache Tapestry(http://wicket.apache.org/)都是面向组件的Web框架 - 与Apache Foundation的基于行为的框架(如Stripes)相反.两者都允许您使用Java中的组件构建应用程序.它们看起来和我很相似.
这两个框架之间有什么区别?有人有经验吗?特别:
他们的表现如何,国家处理能够定制多少,他们可以无国籍地使用吗?
它们的组件模型有什么区别?
您会选择哪些应用程序?
他们如何与Guice,Spring,JSR 299集成?
编辑:我已经阅读了两者的文档,我已经使用过两者.这些问题不能通过阅读文档来回答,而是根据使用这些问题一段时间的经验,例如如何在无状态模式下使用Wicket用于高性能站点.谢谢.
我看到的一些相关差异:
Tapestry使用半静态页面结构,您可以使用条件和循环来实现动态行为.Wicket完全是动态的; 您可以动态加载组件,在运行时替换它们等.这样做的结果是Tapestry更容易优化,并且Wicket在其使用中更灵活.
两个框架在执行方面大致同样有效,但Wicket依赖于服务器端存储(默认情况下,会话中的当前页面,以及"二级缓存"中的过去页面,默认情况下是文件系统中的临时文件).如果这让您感到困扰,请考虑您希望在高峰时段有多少并发会话,并计算每个会话~100kb(这可能是偏高的).这意味着你可以运行大约支持20k并发会话2GB.说15k因为你需要那些记忆用于其他事情.当然,存储状态的一个缺点是它只能很好地处理会话亲和性,所以这在使用Wicket时是一个限制.该框架为您提供了实现无状态页面的方法,但如果您正在开发完全无状态的应用程序,您可能会考虑使用不同的框架.
Wicket的目标是最大限度地支持静态类型,而Tapestry更多的是保存代码行.因此,使用Tapestry,您的代码库可能更小,这对于维护很有用,而对于Wicket,您可以使用静态类型,这样可以更轻松地使用IDE进行导航并使用编译器进行检查,这对于维护也很有用.对于这两个人来说都有话要说.
我已经阅读了几次,人们认为Wicket通过继承工作很多.我想强调你有一个选择.有一个组件的层次结构,但Wicket也支持组合,虽然像IBehavior这样的构造(在其上构建了例如Wicket的Ajax支持).最重要的是,您可以使用转换器和验证器之类的东西,它们可以全局添加到组件中,甚至可以使用Wicket提供的一些相位侦听器作为交叉关注点.
在学习Tapestry 5后修订.
Wicket的目标是尝试使Web开发类似于桌面GUI.他们设法以牺牲内存使用(HTTPSession)为代价做得非常好.
Tapestry 5的目标是对面向组件的Web框架进行非常优化(针对CPU和内存).
对我来说真正的重大缺陷是"Wicket支持无状态组件!" 争论"Wicket记忆犹新".虽然Wicket确实支持无状态组件,但它们并不是"Wicket开发的重点".例如,StatelessForm中的错误很长时间没有修复 - 请参阅StatelessForm - 验证失败后参数问题.
在您要优化/微调Web应用程序参数之前,使用Wicket的恕我直言是有点eaiser
如果您已经编写了Web应用程序并想要在请求处理方面进行思考,那么恕我直言Wicket就更难学习了
Tapestry 5会在您更改组件类时自动重新加载它们.两个框架都重新加载组件标记.
Wicket强制标记/代码分离,Tapestry 5只是给你这种能力.您还可以在Tapestry 5中使用较少详细的语法.一如既往,这种自由需要更多的注意事项.
Wicket的核心更容易调试:用户组件基于继承,而Tapestry 5用户组件基于注释.另一方面,Tapestry可以更容易地转换到未来的版本,然后是Wicket.
不幸的是,Tapestry 5教程没有强调像't:loop source ="1..10"......这样的Tapestry代码示例可能是一个不好的做法.因此,如果您的团队规模不小,那么应该将一些努力用于编写Tapestry使用惯例/良好实践.
我的建议:
当您的页面结构非常动态时使用Wicket,并且您可以为每个用户支付10-200 Kbs的HttpSession内存(这些是粗略的数字).
如果您需要更有效地使用资源,请使用Tapestry 5
这是IBM开发人员工作的一个非常彻底的比较.
http://www.ibm.com/developerworks/java/library/os-tapestrywicket/index.html?ca=drs
更新:链接已关闭,但您可以在http://web.archive.org/web/20131011174338/http://www.ibm.com/developerworks/java/library/os-tapestrywicket/index.html上找到该页面. ?CA = DRS