20

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

根据就业市场的考虑、技术的新颖性和其他 SO 用户的建议,我将 Java Web 框架的选择范围缩小到这个子集。

在这些因素中我应该考虑哪些因素?

4

11 回答 11

34

我从 1.4 版开始使用 GWT,从 2.0 规范出来后使用 JSF。

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

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

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

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

恢复:

  • GWT更适合需要最佳客户端性能的 Web应用程序(想想 gmail)。编写自定义组件(您编写 Java)很容易,并且由于您的服务器端只是一个服务层,您可以在服务器端完全无状态。
  • JSF更适合大多数 CRUD 应用程序,这些应用程序更适合面向组件的东西:想想酒店/航班预订系统、带有购物车的在线商店等
于 2010-08-31T16:02:57.600 回答
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 开发人员仍然可以有效
  • 战斧/特立尼达提供了良好的小部件库

缺点:

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

我绝不是 JSF/Facelets 方面的专家,所以我敢肯定还有其他一些我错过了。希望其他人也能详细说明。

JSF 2.0 的更新:

于 2009-04-13T20:50:45.297 回答
16

感谢检票员保持清醒并继续讨论。我是检票口用户,我喜欢它。我的主要原因是:

  1. 它是一个组件框架。我喜欢使用组件而不是整页。
  2. 我可以让设计人员在处理 java 部件时处理模板和页面

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

  4. 我喜欢它的 ajax Fallback 机制。如果浏览器不支持 JavaScript,尤其是在移动设备上,它会退回到纯 html 并且一切正常。
  5. 它缺少 xml 配置是一个优点
  6. 它支持我在 Web 应用程序中想要的一切。例如验证、国际化、后退按钮支持和 restful URL 等

我之前的经验是 GWT 和 JSF 1.0

于 2010-08-10T05:13:02.930 回答
10

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

我相信您可以将 Seam 与 JSF、Wicket 和 GWT 一起使用。JSF 支持是主要且优秀的;我不确定其他两个的支持情况如何。

由于您的标准的重点似乎是您的技能的适销性,我建议通过 Facelets 尝试 Seam 和 JSF。JSF 是一个广为接受的标准,如果您使用 Facelets,它实际上是一种令人愉快的使用。您可以通过 Richfaces 和 Ajax4jsf 获得流畅的 AJAX 功能。Seam 正在通过 JCP 或多或少地标准化。

于 2009-04-13T20:59:00.033 回答
7

我的经验是,按时间顺序:

原始 servlet - (是的,很多艰苦的工作,但那是早期的,我们是热切的海狸!)

JSP - 我以为它出来的时候是个笨蛋(如果我们只知道;))

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

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

于 2011-02-10T22:37:10.210 回答
3

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

这将在维护场景中为您提供帮助,希望您的代码也能及时结束。写得好的代码永远存在 :)

在这种特殊情况下,我建议使用 JSF。我只尝试了 1.1 的 Apache 实现,但是在 JSP 之上是很痛苦的。我们将很快对其进行修改——我希望研究在 facelets 上使用 JSF。

于 2009-04-17T01:13:08.773 回答
1

我已经大量使用了 Wicket 和 GWT。从来没有真正学会爱威克特。

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

今天查看 GWT 2.0 uiBinder 让我想起了在 Wicket 中必须将 XML 组件树与用 Java 创建的组件树进行匹配是多么烦人。对我来说,GWT 的旋转看起来要好得多。

我已经有一年多没有使用 Wicket 了,所以也许他们已经修复了很多问题,但鉴于现代浏览器和 JS 支持,我看不出在服务器上做所有这些事情的意义(我知道,我知道数据局部性)。

于 2009-10-28T16:42:06.843 回答
1

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

我认为 GWT 最明显的优点是,它比 JSF、wicket 等服务器端表示层技术具有更好的可扩展性。因为,服务器不需要存储客户端状态,也使用了客户端 cpu 电源。这是一个巨大的好处,你不需要在服务器计算机之间序列化客户端状态来实现容错系统。

于 2010-05-21T13:14:08.590 回答
1

我知道这有点晚了,但是在 Framewrok 上已经有很多比较,尤其是这个,发生在 Devox 2010 conf 期间:

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

这应该可以帮助您选择:)

于 2012-09-13T14:40:05.590 回答
1

我从 JSF(1.1 和 1.2)开始,非常痛苦,我决定在下一个项目中进行更改。我进行了一些研究,然后决定尝试 Wicket,这真是一种享受。我也尝试过 JSF 2,但还是一样。

它们都是组件框架,但是使用 Wicket 很容易,而使用 JSF 则完全是一团糟。

JSF 上的检票口:

  • 在 Wicket HTML 中是 HTML。JSF 有自己的标记。h:dataTable (用于表)是无稽之谈。相信我,Sun 工程师在设计它时不得不喝醉。
  • 在 Wicket 中,诸如安全性之类的事情,
  • 使用 JSF,导航栏会显示上一个 URL。真的很奇怪。
  • JSF 在我看来很重,而且像 Rich 或 Prime 这样的库更是如此。
  • 有时,似乎不可能知道发生了什么。你总是对着你的电脑大喊大叫,因为你不知道 JSF 为什么要这么做。

检票口上的 JSF:

  • In Wicket you're going to write more Java (the binding with HTML). At least, your IDE will provide refactoring and validation support.
  • Resources management in Wicket is a bit tricky.
  • There are much more documentation and support for JSF

One common flaw is that session size is are problem (because graphical components are stored in there).

All in all, if you have to decide only between Wicket and JSF there not doubt for me, Wicket.

于 2012-09-13T17:47:13.300 回答
-10

JSF 已被弃用(当 2010 年传教士比较或谈论 Web 框架时,JSF 甚至没有被列为可比较的框架)。

现在使用 GWT、YUI、JQuery 等创建成熟的大型应用程序。

通过google及以上阅读一些文章将是显而易见的。

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

于 2010-05-04T20:54:06.637 回答