Apache Tapestry和Apache Wicket之间的区别

Apache Wicket( http://wicket.apache.org/ )和Apache Tapestry( http://wicket.apache.org/ )都是面向组件的web框架 ,与Apache基金会的Stripes等基于动作的框架相反。 两者都允许您从Java组件构build应用程序。 他们两个看起来都很像我

这两个框架有什么区别? 有两个人都有经验吗? 特别:

  • 他们的performance怎么样,状态处理可以定制多less, 可以使用无状态吗?
  • 他们的组件模型有什么不同?
  • 你会select哪个应用程序?
  • 他们如何整合Guice,Spring,JSR 299?

编辑 :我已经阅读了两个文件,我已经使用两个。 这些问题不能从阅读文档中充分回答,而是从使用这些文档一段时间的经验,例如如何将Wicket用于高性能站点的无状态模式。 谢谢。

一些相关的差异,我看到他们:

  • Tapestry使用半静态页面结构,您可以使用条件和循环来实现dynamic行为。 Wicket是完全dynamic的; 您可以dynamic加载组件,在运行时replace它们等等。这样做的后果是Tapestry更容易优化,Wicket在使用时更加灵活。
  • 这两个框架的执行效率大致相同,但是Wicket依赖于服务器端存储(默认情况下会话中的当前页面和“二级caching”中的过去页面,默认情况下是文件系统中的临时文件)。 如果这让你感到困扰,考虑一下在高峰时间有多less个并发会话,并且每个会话的计算时间大概是100kb(这可能是偏高的)。 这意味着你可以运行2GB大概支持20k并发会话。 说15k,因为你也需要这个记忆。 当然,存储状态的一个缺点是它只能和会话关联一起工作,所以在使用Wicket时是一个限制。 该框架为您提供了实现无状态页面的方法,但是如果您正在开发完全无状态的应用程序,则可能会考虑使用不同的框架。
  • Wicket的目标是最大限度地支持静态打字,而Tapestry则更多的是节省代码行。 所以对于Tapestry,你的代码基数可能更小,这对于维护是有利的,对于Wicket,你很多是静态types的,这使得用IDE导航和检查编译器变得更容易,这对于维护也是很好的。 对于两个imho都要说些什么。

现在我已经读了几次,人们认为Wicket通过inheritance进行了很多工作。 我想强调,你有一个select。 有一个层次的组件,但Wicket也支持组合,但像IBehavior这样的构造(在Wicket的Ajax支持之上)。 除此之外,您还可以使用转换器和validation器,您可以在全局范围内添加到组件中,也可以作为使用Wicket提供的某些阶段监听器的交叉问题。

学习了挂毯5后修订

Wicket的目标是尝试使Web开发类似桌面GUI 。 他们设法以牺牲内存使用(HTTPSession)为代价。

Tapestry 5的目标是为非常优化(针对CPU和内存)的面向组件的web框架。

对我来说,真正的巨大隐患是“Wicket支持无状态组件!” “Wicket饥饿的记忆”的论点。 虽然Wicket确实支持无状态组件,但它们并不是“Wicket开发的焦点”。 例如,StatelessForm中的一个bug在很长一段时间里并没有被修复 – 请参阅StatelessForm – validation失败后的参数问题 。

  • 恕我直言,使用Wicket是有点eaiser,直到你要优化/微调Web应用程序参数
  • 恕我直言Wicket更难研究,如果你已经编程的Web应用程序,并希望在请求处理方面思考
  • Tapestry 5自动重新加载组件类 ,只要你改变它们。 这两个框架重新加载组件标记。
  • Wicket力量标记/代码分离 ,Tapestry 5只是给你这个能力。 您也可以在Tapestry 5中使用较less的冗长语法。一如以往,这种自由需要更多的注意。
  • Wicket的核心更容易debugging:用户组件基于inheritance,而Tapestry 5用户组件基于注释。 从另一方面,可以使对Tapestry的未来版本的过渡更容易,然后Wicket。

不幸的是, Tapestry 5教程并不强调像't:loop source =“1..10”…“这样的Tapestry代码示例可能是一个不好的做法。 所以如果你的团队不是很小,那么应该写一些Tapestry的使用习惯/好的做法。

我的build议是

  • 使用Wicket当你的页面结构是非常dynamic的,你可以承受每个用户花费10-200 Kbs的HttpSession内存(这些是粗略的数字)。
  • 在需要更高效地使用资源的情况下使用Tapestry 5

我认为Wicket是一个更简单的框架来使用。

此外,Wicket允许通过IDE的热代码replace系统来重新加载类。 这是Wicket运行当前正在运行的应用程序的类的修改版本所需的全部内容。 通常的限制适用于热代码replace,例如必须以debugging模式(Eclipse)运行,并且不能更改类的结构方面(即类名称,更改方法签名等)。

我不喜欢Tapestry编程模型,我知道很多开发人员因为太多的变化和开发不兼容而离开了Tapestry。 请参阅: http : //ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/

Wicket是非常好的Web框架。 最好的是我所知道的。 我从版本1.3开始使用它,总是得到我想要的。 Wicket与Spring有很好的集成 – 只要在你的代码中使用@SpringBean注释来向你的类注入任何spring bean即可。

试试http://incubator.apache.org/click/ 。 这是惊人的Java Web框架。 有人称之为“Wicket made right”;-)

正如我刚才所说4.1是官方的稳定版本:

在使用Tapestry之前,应该仔细阅读Tapestry的发展历史。 Tapestry做了很多不兼容的升级,没有继续支持旧版本。 4.1的补丁在合理的时间内不再被处理。 对于官方的稳定版本,我认为这是不可接受的。

承诺使用Tapestry 5意味着:

你应该成为一个提交者; 你需要跟上所有新的发展,尽快放弃旧版本; 保持自己的稳定版本。

Interesting Posts