47

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

这两个框架之间有什么区别?有人在这两个方面都有经验吗?具体来说:

  • 它们的性能如何,可以定制多少状态处理,可以无状态使用吗?
  • 他们的组件模型有什么区别?
  • 你会为哪些应用选择什么?
  • 它们如何与 Guice、Spring、JSR 299 集成?

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

4

8 回答 8

41

我看到的一些相关差异:

  • Tapestry 使用半静态页面结构,您可以在其中使用条件和循环来实现动态行为。Wicket 是完全动态的;您可以动态加载组件,在运行时替换它们等。这样做的结果是 Tapestry 更容易优化,并且 Wicket 的使用更灵活。
  • 两个框架的执行效率大致相同,但 Wicket 依赖于服务器端存储(默认情况下会话中的当前页面,以及“二级缓存”中的过去页面,默认情况下是文件系统中的临时文件)。如果这让您感到困扰,请考虑一下您希望在高峰时间有多少并发会话,并以每个会话约 100kb 的方式进行计算(这可能偏高)。这意味着您可以运行大约支持 2GB 的 20k 并发会话。说 15k,因为您也需要该内存用于其他事情。当然,存储状态的一个缺点是它只适用于会话亲和性,所以这是使用 Wicket 时的一个限制。该框架为您提供了一种实现无状态页面的方法,但如果您
  • Wicket 的目标是最大程度地支持静态类型,而 Tapestry 更多的是关于节省代码行数。因此,使用 Tapestry,您的代码库可能会更小,这有利于维护,而使用 Wicket,您的代码大部分是静态类型的,这使得使用 IDE 导航和使用编译器检查变得更容易,这也有利于维护。恕我直言。

到目前为止,我已经读过几次,人们认为 Wicket 主要通过继承来工作。我想强调的是,你是有选择的。有一个组件的层次结构,但 Wicket 也支持通过 IBehavior 之类的结构组合(例如,在其之上构建了 Wicket 的 Ajax 支持)。除此之外,您还有转换器和验证器之类的东西,您可以将它们全局添加到组件中,甚至使用 Wicket 提供的一些阶段侦听器作为横切关注点。

于 2009-08-13T18:18:55.103 回答
36

学习 Tapestry 5 后修订。

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

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

对我来说真正的大陷阱是响应“Wicket 支持无状态组件!” 对于“Wicket 内存不足”的论点。虽然 Wicket 确实支持无状态组件,但它们并不是“Wicket 开发的重点”。例如,StatelessForm 中的一个错误很长时间没有得到修复 - 请参阅StatelessForm - 验证失败后的参数问题

  • 恕我直言,在您要优化/微调 Web 应用程序参数之前,使用 Wicket 会更容易一些
  • 恕我直言,如果您编写了 Web 应用程序并想从请求处理的角度思考,那么 Wicket 就更难学习了
  • Tapestry 5会在您更改组件类时自动重新加载它们。两个框架都重新加载组件标记。
  • Wicket 强制标记/代码分离,Tapestry 5 正好给你这个能力。您还可以在 Tapestry 5 中使用不那么冗长的语法。与往常一样,这种自由需要更加谨慎。
  • Wicket 的核心更容易调试:用户组件基于继承,而 Tapestry 5 用户组件基于注解。从另一方面来说,Tapestry 比 Wicket 更容易过渡到未来版本。

不幸的是, Tapestry 5 教程并没有强调 Tapestry 代码示例,例如 't:loop source="1..10"...' 可能是一个不好的做法。因此,如果您的团队不是非常小,那么应该在编写 Tapestry 使用约定/良好实践方面付出一些努力。

我的建议

  • 当您的页面结构非常动态并且您可以负担每个用户花费 10-200 Kbs 的 HttpSession 内存(这些是粗略的数字)时,请使用 Wicket。
  • 在您需要更有效地使用资源的情况下使用 Tapestry 5
于 2009-03-18T13:06:21.593 回答
1

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

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

于 2009-07-18T07:00:54.177 回答
1

I don't like the Tapestry programming model and I know of many developers leaving Tapestry because of too much changes and incompatibilities in development. See: http://ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/

于 2010-01-16T11:00:56.170 回答
0

Wicket 是一个非常好的 Web 框架。最好的我所知道的。我从 1.3 版开始使用它,并且总是得到我想要的。Wicket 与 Spring 具有出色的集成 - 只需在代码中使用 @SpringBean 注释即可将任何 Spring bean 注入到您的类中。

于 2009-03-23T07:05:16.123 回答
0

试试http://incubator.apache.org/click/。这是一个了不起的 java web 框架。有人称其为“Wicket 做得对”;-)

于 2010-01-16T10:47:15.170 回答
0

As I said when 4.1 was the official stable release:

You should take a very good look at the development history of Tapestry before committing to use it. Tapestry has done a lot of non-compatible upgrades, with no continuation of support of older versions. Patches to 4.1 are not processed anymore within a reasonable timeframe. That is in my point of view not acceptable for the official stable version.

Committing to use Tapestry 5 means:

you should become a committer; you need to keep up with all new development, abandon old versions as fast as possible; maintain stable versions yourself.

于 2010-06-13T09:48:18.050 回答