【问题标题】:Java EE vs JSP vs JSF [closed]Java EE vs JSP vs JSF [关闭]
【发布时间】:2014-07-05 14:24:51
【问题描述】:

我希望学习一种用于开发 Web 应用程序的 Java 技术。当我对此进行深入研究时,我对 感到困惑。我知道 SO (post 1, post 2) 上有几个帖子试图解决这些困惑,我还有一些帖子:

  1. JSP 是否已经“死”而有利于 JSF?
  2. 是 JSF 在其上运行的平台 Java EE 还是完全不同的东西?
  3. JSF 仅仅是用于开发 Web 应用程序的 MVC 框架吗?
  4. JSF 是由 Oracle 开发的框架,是 Java 的一部分,还是完全是一个单独的框架(很像 Zend Framwork 来自 PHP)?
  5. [Bonus]你会推荐学习吗?

在您的回答中,请随意将这些技术与 ASP.NET、ASP.NET MVC、Ruby on Rails、Zend Framework 或常规 Java Applet 等技术进行比较,因为这些都是我已经熟悉的东西.

感谢您的宝贵时间。

【问题讨论】:

  • JSP 和 JSF 都是“死”技术。 JSP 来自一个编写脚本和弄乱您的 HTML 页面是常态的时代(请参阅旧式 PHP 脚本)。 JSF 试图通过将表示方面抽象为组件来解决这个问题,但由于表示技术发展得太快(Jquery、Bootstrap、Angular、Knockout 等)而惨遭失败。现在最可维护的方法是使用模板(Velocity、Freemarker 等)的纯 MVC,这些模板有自己的 MVVM 循环,用于使用现代 JS 的 AJAX。甚至 PHP(Smarty、Twig 等)也是这样发展的。
  • JSF 根本没有“死”,JSF 2.3 将在 2017 年作为 Java EE 8 的一部分交付,并且与 jQuery 或引导程序不兼容。

标签: jsf jsp javaee jsp jsf java jsp jsf jsf-2


【解决方案1】:

JSP 是否已经“死”而有利于 JSF?

JSF 比 JSP 有无数的好处。例如:

  • 它定义了一种 MVC 方法
  • 它建立了组件化标准
  • 它具有应用值功能
  • 内置 AJAX
  • 定义的视图上下文控件
  • 允许 Primefaces 等丰富的接口扩展

我们可以继续下去。

您仍然可以将 JSP 用于需要特定灵活性或性能的其他场景,对于 servlet 也是如此,但 JSF 几乎取代了 JSP 用于“健壮”的应用程序。

现在,我是 JSF 的忠实粉丝,但它还有很长的路要走。 JSF 2.2 看起来有点像一个成熟的框架,现在它有一个定义的导航标准 (FacesFlow),我们在 2.1 中只是有一个内置的文件上传器,它甚至不是 AJAX,还有“HTML5”等。是的,还有很多工作要做,我不会在这里详细说明。

根据我的经验,如果与 JSF 和 Spring MVC 等其他框架相比,JSP 实际上是“死的”。 Java EE 7 教程几乎没有提到 JSP。但它并没有死,因为它已经在 Web Containers 中得到支持,你仍然可以使用它。

是 JSF 运行在 Java EE 之上的平台还是不同的平台 全部?

JSF 是 Java EE 的一部分,但您不需要完整的 Java EE 配置文件即可使用 JSF。例子:

  • Tomcat 只是一个 Java EE Web Profile 实现,你可以使用 Tomcat 中的 JSF。
  • 您可以在 JBoss 中使用 JSF,但您不需要启用 JMS 以使 JSF 工作。

Java EE 组件是模块化的,您只需要一个 Web Profile 服务器/容器即可使用 JSF。

JSF 仅仅是一个用于开发 Web 应用程序的 MVC 框架吗?

是的(但我不会说只是)。每个人都有自己的优点和缺点。但原理是一样的。

人们可能会争论与 EJB 的集成,但 Spring MVC 与它自己的容器也是如此。

JSF 是 Oracle 开发的框架,是 Java 的一部分,还是 完全独立的框架(很像 Zend Framwork 来自 PHP)?

Oracle 现在委托团队定义规范。理论上,您可以根据需要实现自己的 JSF。我不知道 PHP 的 Zend Framework。

最常见的 JSF 实现是 Mojarra 和 MyFaces。 (Luiggi 在这方面打败了我,你可以查看他的链接)。

[Bonus]你会推荐学习jsp还是jsf?

我会推荐两者。首先是 JSP,然后是 JSF。

但我会 100% 推荐您在项目中使用 JSF。但请确保您了解组件化以及使 JSF 成为强大工具的所有内容。

还可以查看JSF 2.2 new features,此页面非常棒,可以介绍添加到框架中的最新功能。

【讨论】:

  • 谢谢!这对我解决这些差异很有帮助。
  • Spring MVC 仍然使用 JSP 作为视图技术。
  • @LuiggiMendoza Spring MVC 仍然支持 JSP(您可以在书籍等中找到很多,因为这是人们最熟悉的),但建议使用更好的模板技术,例如 Velocity 和 Freemarker。
  • 我知道问题是关于 JSP 与 JSF,但为什么不使用 ReactJS、AngularJS 或 VueJS 作为视图层呢?它们在客户端呈现,因此对于遗留系统,您可能需要寻找服务器端呈现的视图,在这种情况下,我会建议使用 thymeleaf。 JSF 很好,但你会被 JEE 托管 bean 所束缚。
  • @EvandroPomatti 我完全同意你的观点,我只是指出了新的方法,因为我相信现在讨论 jsf/primefaces 的替代方案是相关的。 JSF 仍然富有成效:是的,此外,在遗留系统的情况下,新方法可能会脱离上下文。另一方面,作为视图层的“反应”使事情变得更加强大,并允许开发人员提供许多交互式用户界面,并通过将它们分发给多个客户端来减轻额外的服务器处理工作。
【解决方案2】:

JSP 是否已经“死”而有利于 JSF?

不,它仍然作为视图技术为旧版和当前的 Web 应用程序维护。此外,JSF 使用 JSP 作为视图,但是从 JSF 2 开始,最好使用 Facelets 作为技术视图。原因在这里解释:Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards?。简而言之,Facelets 支持对要呈现的内容进行预处理和后处理,而 JSP 不支持。

是 JSF 在其上运行的平台 Java EE 还是完全不同的东西?

JSF 可以在任何Java Web 应用服务器中自行运行。您只需要添加必要的库:JSF-api 和 JSF-impl。

JSF 仅仅是一个用于开发 Web 应用程序的 MVC 框架吗?

是的。它不为 Web 服务生成、连接池、事务管理等提供任何帮助。它支持通过@EJB 进行 EJB 注入和通过@ManagedProperty 进行参数注入,仅此而已。您可以使用其他框架来完成这项工作:Hibernate、EJB、Spring、CDI 等。

JSF 是由 Oracle 开发的框架,是 Java 的一部分,还是完全是一个单独的框架(很像 Zend Framwork 来自 PHP)?

JSR 344 支持 JSF。 Oracle 支持的Java Community Process 支持此规范。由此可以推断,至少 Oracle 提供了 JSF 的实现。由于 JSF 是一种规范,因此它也可以由其他组织实现。目前,还有另一个 JSF 实现,MyFaces

你会推荐学习吗?

这就像问我应该学习如何创建 HTML 还是如何使用一个库集来为我创建 HTML?。 JSP 是一种通过使用 Java 技术支持动态内容的 Web 应用程序视图的技术。 JSF 是一个 MVC 框架,可帮助您简化视图(JSP 或 Facelets)中内容的生成以及通过视图、控制器和模型进行数据绑定。您可以同时学习两者,我建议您了解当前正在使用或将使用的内容。在 IMO,您应该同时学习:开发 JSF 应用程序的 JSF,以及使用其他 MVC 框架或维护使用 JSP 构建的当前遗留应用程序的 JSP。

【讨论】:

  • 感谢您的详细解答!这很有帮助。
【解决方案3】:

1. JSP 是否“死”了支持 JSF?

在 JAVA EE 领域,JSP 被宣布“过时”。在更广阔的世界里,它还活着。

2.Java EE 是运行 JSF 的平台还是完全不同的平台?

取决于“顶部”在哪里。 Servlet 是包括 JSF 在内的大多数 Java 框架的基础。

3.JSF仅仅是一个用于开发Web应用程序的MVC框架吗?

是的,JSF 是一个表示层框架。

4.JSF 是 Oracle 开发的框架,是 Java 的一部分,还是完全独立的框架(很像 Zend Framwork 来自 PHP)?

JSF 是 Oracle 的 Java EE 7 的官方部分。

5.[Bonus]你会推荐学习jsp还是jsf?

两者都有,达到一定的深度。还可以考虑 HybridJava - 它与 JSF 一样强大,但要简单两倍。

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多