我应该选择哪个框架 - Seam,Wicket,JSF或GWT?

时间:2009-04-13 19:14:53

标签: java jsf seam wicket web-frameworks

我在讨论是否使用Seam,Wicket,JSF或GWT作为Java项目中表示层的基础。

我根据就业市场考虑因素,技术的新颖性以及其他S.O.的推荐,将我选择的Java Web框架缩小到这个子集。用户。

在决定这些因素时,我应该考虑哪些因素?

11 个答案:

答案 0 :(得分:34)

自从2.0规范发布以来,我从版本1.4和JSF开始使用GWT。

GWT是一个客户端框架,它从Java生成JavaScript。您的架构将是纯客户端 - 服务器,这意味着:

  • 最好使用粗粒度服务
  • 前往客户端的所有对象都应该是完全可序列化的(这意味着没有延迟加载或OpenSessionInView模式)
  • 从GWT 2.0开始,您可以使用xhtml设计你的gui,这在造型和设计方面要容易得多。构建HTML
  • GWT倾向于支持良好的架构,如果搞砸了它将重构
  • 完美历史记录(浏览器后退按钮,可收藏的网址)支持很难,您可能需要自己动手,虽然很容易在前面破解某些内容

JSF是一个基于组件的框架,具有视图优先设计(如果您愿意,可以使用代码隐藏):

  • 更容易做某种类型的webapps(有状态,如购物车)
  • JSF + Seam支持对话(想想类似于向导的页面,可以跨多个页面维护状态)
  • 可以实现OpenSessionInView,具体取决于您的堆栈。如果您将EJB用于服务/业务层
  • ,则可能不建议这样做
  • JSF2对AJAX有精湛支持,并且使用像RichFaces这样的组件套件,您可以构建漂亮的webapps
    • 但如果你想要精美的javascript行为,你将不得不写一些javascript
  • JSF跟踪客户端或服务器端的当前UI状态。这是网络流量或服务器内存之间的权衡。

恢复:

  • GWT 更适合需要最佳客户端性能的网络应用(想想gmail)。编写自定义组件(编写Java)很容易,因为服务器端只是服务层,所以在服务器端可以完全无状态。
  • JSF 更适合大多数CRUD应用程序,它们更适合面向组件的东西:想想酒店/航班预订系统,带购物车的在线商店等等。

答案 1 :(得分:18)

我使用的唯一一个是JSF,所以我无法向你提供其他人的反馈,但这是我对JSF的看法。根据我的经验,当我们从JSP中的JSF转换为facelets中的JSF时,生活变得更加容易,因此我将专注于facelets。此外,看起来Seam和JSF并不相互排斥。

优点:

  • 创建facelets xhtml组件很简单,可以促进重复使用。
  • 使用内置标签(如ui:insert,ui:include和ui:decorate
  • )的体面模板功能
  • 通过faces-config
  • 轻松访问Spring bean
  • 基于XHTML,因此不熟悉java的Web开发人员仍然可以有效
  • tomahawk / trinidad提供的好小部件库

缺点:

  • 仅发布请求。这可能会使书签变得困难。
  • 不像GWT那样内置ajax-y,但如果与Seam一起使用,这可能会被修复

我不是JSF / Facelets的专家,所以我确信还有其他人我错过了。希望其他人也会详细说明。

JSF 2.0更新:

答案 2 :(得分:15)

感谢wicket家伙保持清醒并坚持讨论。我是一个wicket用户,我喜欢它。我的主要原因是:

  1. 它是一个组件框架。我喜欢使用组件而不是整页。
  2. 我可以让设计师处理模板和页面,因为我处理java部分

  3. 没有什么新东西需要学习。它的“只是java和只是HTML”

  4. 我喜欢它的ajax Fallback机制。如果浏览器上没有javascript支持,特别是在移动设备上,它会回归到简单的html,一切正常。
  5. 缺少xml配置是一个加号
  6. 它支持我在Web应用程序中想要的一切。例如验证,国际化,后退按钮支持和其他宁静的URL
  7. 我以前的经验是GWT和JSF 1.0

答案 3 :(得分:10)

Seam是一个应用程序框架,而不是一个表示层。它最初的开发是为了减轻JSF的痛苦,但已经演变成更通用的依赖注入框架。

我相信您可以将Seam与JSF,Wicket和GWT结合使用。 JSF的支持是初级和优秀的;我不确定其他两个人的支持程度如何。

由于您的标准的重点似乎是您的技能的适销性,我建议您通过Facelets尝试Seam和JSF。 JSF是一个公认的标准,如果你使用Facelets,它实际上很有用。您可以通过Richfaces和Ajax4jsf获得灵活的AJAX功能。 Seam通过JCP或多或少标准化。

答案 4 :(得分:7)

我的经验是按时间顺序:

原始的servlet - (是的,很多努力工作,但它是早期的,我们是渴望海狸!)

JSP - 我认为它出现的时候就是beez neez(如果我们只知道的话);)

Echo - 非常棒的框架,但不适用于需要搜索引擎友好的页面(相同 GWT的问题)

Wicket - 非常棒的框架 - 开发人员完全理解OO的概念(与JSP和许多其他人不同),并将所有常用的OO细节应用于此框架。如果你欣赏'可重用性',如果你喜欢封装,如果你喜欢分离关注点,如果你想将你的模型绑定到UI代码而不必担心对象编组和其他这样的丑陋,那么这就是你的框架! / p>

答案 5 :(得分:3)

从长远来看,我建议使用Sun规范支持的技术。到目前为止,这已经证明可以选择多个实现(通常也是开源实现),而且行为往往定义得很好。

这将有助于您在维护场景中 - 希望 - 您的代码也会及时结束。编写良好的代码永远存在:)

在这个特殊场景中,我建议使用JSF。我只尝试过1.1的Apache实现,但是在JSP之上是有害的。我们很快就要对它进行修改 - 我希望在facelets上考虑使用JSF。

答案 6 :(得分:1)

我使用了Wicket和GWT非常重要。从未真正学会爱Wicket。

我的自我发表了关于它的博客http://salk31.blogspot.com/2009/07/wicket-ajax.html

今天看看GWT 2.0 uiBinder提醒我,在Wicket中必须将XML组件树与用Java创建的组件树相匹配是多么令人讨厌。 GWT旋转对我来说看起来好多了。

我没有使用Wicket超过一年所以也许他们已经解决了很多这个问题,但鉴于现代浏览器和JS的支持,我无法看到在服务器上做这一切的重点(我知道,我知道数据)局部性)。

答案 7 :(得分:1)

如果你只考虑就业市场,你应该选择JSF。但是,我相信RIA的未来属于GWT和gwt,就像客户端技术一样。

我认为GWT最明显的优势,它比服务器端表示层技术(如JSF,wicket)更具可扩展性。因为,服务器不需要存储客户端状态,客户端CPU功率也被使用。这是一个巨大的好处,你不需要在服务器计算机之间序列化客户端状态以实现容错系统。

答案 8 :(得分:1)

我知道它有点晚了但是在Framewrok上已经有很多比较了,特别是这个,它发生在durinf Devox 2010 conf:

http://www.devoxx.com/display/Devoxx2K10/Comparing+JVM+Web+Frameworks

这可以帮助您选择:)

答案 9 :(得分:1)

我从JSF(1.1和1.2)开始,我决定改变下一个项目真是太痛苦了。我研究了一下,我决定尝试Wicket,这真是一种乐趣。 我也试过JSF 2,但仍然是一样的。

它们都是组件框架,但使用Wicket的东西很容易,而JSF则完全混乱。

Wicket over JSF:

  • 在Wicket中,HTML是HTML。 JSF有自己的标记标记。 h:dataTable(对于表格)是无稽之谈。相信我,Sun Engineers在设计它时必须喝醉。
  • 在Wicket中的安全事项,
  • 使用JSF,导航栏会显示以前的URL。真奇怪。
  • JSF在我看来非常沉重,而且像Rich或Prime这样的库甚至更多。
  • 有时候,似乎无法知道发生了什么。你最终总是对你的电脑大喊大叫,因为你不知道JSF为什么这么做。

JSF over Wicket:

  • 在Wicket中,您将编写更多Java(与HTML绑定)。至少,您的IDE将提供重构和验证支持。
  • Wicket的资源管理有点棘手。
  • JSF有更多文档和支持

一个常见的缺陷是会话大小有问题(因为图形组件存储在那里)。

总而言之,如果你只能在Wicket和JSF之间做出决定,那么对我来说毫无疑问, Wicket

答案 10 :(得分:-10)

不推荐使用JSF (当福音传播者在2010年比较或讨论Web框架时,JSF甚至没有列为比较框架。)

现在使用GWT,YUI,JQuery等创建大型应用程序。

阅读谷歌及以上的一些文章将是显而易见的。

(JSF上的所有工作都是为了支持遗留应用程序)。