Apache Tapestry和Apache Wicket之间的区别

时间:2009-03-18 08:23:47

标签: java wicket web-frameworks tapestry

Apache Wicket(http://wicket.apache.org/)和Apache Tapestry(http://wicket.apache.org/都是面向组件的Web框架 - 与Apache Foundation的基于行为的框架(如Stripes)相反。两者都允许您使用Java中的组件构建应用程序。 它们看起来与我非常相似

这两个框架有什么区别?有人有经验吗?具体做法是:

  • 他们的表现如何,可以自定义状态处理的多少,可以使用无状态吗?
  • 他们的组件模型有什么不同?
  • 您会选择哪些应用程序?
  • 他们如何与Guice,Spring,JSR 299集成?

编辑:我已阅读了两者的文档,并且我已使用过两者。通过阅读文档无法回答这些问题,但是从使用这些问题一段时间后的经验来看,例如如何在无状态模式下使用Wicket用于高性能站点。感谢。

8 个答案:

答案 0 :(得分:41)

我看到的一些相关差异:

  • Tapestry使用半静态页面 结构,你可以在哪里工作 条件和循环来实现 动态行为。 Wicket是 完全动态;你可以加载 动态组件,替换它们 在运行时等。后果 这就是Tapestry更容易 优化,Wicket更多 灵活的使用。
  • 两个框架 大致同样有效率 执行,但Wicket依赖 服务器端存储(默认情况下为 会话中的当前页面,以及过去 “二级缓存”中的页面 默认情况下是文件中的临时文件 系统)。如果那困扰你,请想一想 关于并发会话的数量 你期望在高峰期和 用每个会话说~100kb来计算 (可能偏高)。 这意味着你可以粗略地运行 支持20k并发会话 2GB。说15k因为你需要它 其他事情的记忆。的 当然,存储的缺点 国家是它只会运作良好 与会话亲和力,所以这是一个 使用Wicket时的限制。该 框架为您提供了一种手段 实现无状态页面,但如果 你是完全无国籍的 您可能会考虑的应用程序 不同的框架。
  • Wicket的目标是在最大程度上支持静态类型,而Tapestry更多的是保存代码行。因此,使用Tapestry,您的代码库可能更小,这对于维护很有用,而对于Wicket,您可以使用静态类型,这样可以更轻松地使用IDE进行导航并使用编译器进行检查,这对于维护也很有用。对于这两个人来说都有话要说。

我已经阅读了几次,人们认为Wicket通过继承工作很多。我想强调你有一个选择。有一个组件的层次结构,但Wicket也支持组合,虽然像IBehavior这样的构造(在其上构建了例如Wicket的Ajax支持)。最重要的是,您可以使用转换器和验证器,它们可以全局添加到组件中,甚至可以使用Wicket提供的一些相位侦听器作为交叉关注点。

答案 1 :(得分:35)

在学习Tapestry 5之后

修改

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

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

对我而言,真正的一大陷阱是“Wicket支持无状态组件!”争论“Wicket记忆犹新”。虽然Wicket确实支持无状态组件,但它们并不是“Wicket开发的重点”。例如,StatelessForm中的错误很长时间没有修复 - 请参阅StatelessForm - problem with parameters after validation fails

  • 在您要优化/微调网络应用程序参数之前,使用Wicket的恕我直言是有点过分的
  • 如果您已经编写了Web应用程序并希望在请求处理方面进行思考,那么恕我直言Wicket会更难学习
  • Tapestry 5会在您更改后自动重新加载组件类。两个框架都重新加载组件标记。
  • Wicket强制标记/代码分离,Tapestry 5只为您提供此功能。您还可以在Tapestry 5中使用较少详细的语法。一如既往,这种自由需要更多的注意事项。
  • Wicket的核心更容易调试:用户组件基于继承,而Tapestry 5用户组件基于注释。另一方面,Tapestry可以更轻松地转换到未来版本,然后是Wicket。

不幸的是Tapestry 5 tutorial并没有强调Tapestry代码示例如't:loop source =“1..10”......'可能是一种不好的做法。因此,如果您的团队规模不小,那么应该将一些努力用于编写Tapestry使用惯例/良好实践。

我的推荐

  • 当您的网页结构非常动态时使用Wicket,您可以为每位用户支付10-200 Kbs的HttpSession内存(这些是粗略的数字)。
  • 在需要更有效利用资源的情况下使用Tapestry 5

答案 2 :(得分:10)

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

试试http://incubator.apache.org/click/。 这是令人惊叹的java web框架。 有人称之为“Wicket做得对”; - )

答案 7 :(得分:0)

正如我所说4.1是官方稳定版:

在承诺使用Tapestry之前,您应该非常了解Tapestry的开发历史。 Tapestry已经完成了许多不兼容的升级,并没有继续支持旧版本。 4.1的补丁在合理的时间范围内不再处理。在我看来,官方稳定版本不能接受。

承诺使用Tapestry 5意味着:

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