Java EE 6:JSF vs Servlet + JSP。我是否需要学习JSF?

33

我正在阅读http://java.sun.com/javaee/6/docs/tutorial/doc/gexaf.html以了解 Java EE 6,但我对 JSF 的使用有些困惑。

通常,我开发 Web 应用程序的方式是将 Servlet 作为控制器,JSP 作为 MVC 模型中的视图。那么,JSF 是否试图取代这种结构呢?以下是上述教程中的引用:

Servlet 最适合面向服务的应用程序和控制表示层的函数,如分派请求
JSF 和 Facelet 更适合生成像 XHTML 这样的标记,并且通常用于面向表示层的应用程序

不确定是否完全理解了上面的引用,他们没有很好地解释什么是面向服务的应用程序和面向表示层的应用程序。

JavaServer Faces 应用程序可以将 HTTP 请求映射到组件特定事件处理,并将组件管理为服务器上的有状态对象。

有经验的 Java 开发人员能否为我快速概述一下 JSF、JSP 和 Servlet?我是否需要将它们全部集成在一起,还是根据应用程序分别使用它们?如果是后者,那么什么样的应用程序使用 JSF,相对于 Servlet 和 JSP 呢?

JavaServer Faces 应用程序可以将 HTTP 请求映射到组件特定事件处理,并将组件管理为服务器上的有状态对象。

听起来像是 Servlet 能做的事情,但不确定 manage components as stateful objects on the server 是什么意思?提前感谢。

5个回答

31

JSF基本上使您能够仅使用模型对象(JavaBean)和视图(JSP / XHTML页面)开发Web应用程序。 对于“纯净的”JSP / Servlet,您将不得不引入许多代码来控制,预处理,后处理,收集数据,验证,转换,监听等HTTP请求和响应。 而且我没有谈到将其重构到高(抽象)程度,以便您也可以像JSF一样以相同的方式结束(每个用例只需要一个JavaBean类和JSP / XHTML页面)。

我之前在这里发布了更详细的答案:JSF、Servlet和JSP之间有什么区别?


7
JSP/Servlet是开发Java Web应用程序的基础技术,任何基于Java的MVC框架都是在JSP/Servlet API之上运行的,包括JSF。JSF提供了FacesServlet(没错,它是一个servlet!),你只需要在web.xml中定义一次即可。然后,你就可以仅使用模型对象和视图来开发/运行JSF。 - BalusC
3
它们确实是竞争对手。然而,与 JSF 相比,Spring MVC 的组件库可用性不太丰富。 - BalusC
1
这很奇怪,因为人们总是谈论Spring MVC,而JSF的讨论并不多。我正在考虑在现场对这项技术进行培训,但仍未决定选择Spring还是JSF。由于培训费用相当昂贵,我只想选择其中一种。BalusC,您有任何专业意见吗? - Thang Pham
3
请注意,“Spring” ≠ “Spring MVC”。Spring框架比Spring MVC要包含更多的内容。关于Spring MVC和JSF的选择:在您所在地区寻找工作趋势。选择最受欢迎和/或最高薪水的一个。您总可以在私下时间学习另一个框架。 - BalusC
3
@Harry:http://balusc.blogspot.com/2009/09/webapplication-performance-tips-and.html这是一篇介绍Web应用程序性能优化技巧的文章。它提供了一些有用的建议,包括缓存、优化数据库查询、使用CDN、减少HTTP请求等。阅读本文可帮助您更好地了解如何优化Web应用程序以提高其性能。 - BalusC
显示剩余3条评论

10

在JSF中,使用一个特定的Servlet(Faces Servlet)来处理所有传入的请求并将它们分派到相应的bean。

JSF是一个基于组件的MVC框架,而JSP是一种视图技术。
可以使用JSP与JSF,尽管Facelets是首选的视图技术。


4

JSF提供了一个抽象层,具有多个职责,但最重要的是它处理HTML表单的所有复杂细节,并在Web页面和Java POJO bean之间传输数据(getX、setX方法),这通常很难做到正确。

它还提供导航,在Java EE 6中的最新版本中,它提供了基本的AJAX支持,允许在用户输入数据时简单更新网页。

你可能会发现它更容易理解为一种避免自己编写JavaScript的方法。


JavaScript在过去一年半的性能方面变得更快了。看起来我们只是处于这个趋势的开端,现在随着HTML5的发展,我们真的想要放弃JavaScript吗? - Thang Pham
他没有说要远离JavaScript。使用JSF和像Richfaces或Icefaces这样的不错的组件库意味着你将会编写更少的JavaScript代码。 - Naganalf

3
如果你喜欢使用XML,选择JSF。如果你是一个actionlistener的粉丝,选择Servlet和JSP的doPost、doGet等操作。

2
JSF框架旨在简化基于Web的用户界面的开发集成。正如@bozho所述,您可以混合使用JSP和JSF。然而,在JSF中,“视图”组件是facelets - 可以将其视为小型UI小部件,它们在DHTML样式和JavaScript事件生成和回调方面更或多或少是自包含的。
“我应该费心学习吗?”
不确定。尽管JSF已经存在(至少在理论上)了5年,但我还没有看到JSF取得太大的进展。

有趣的一点,不知道Java EE 6能否为JSF带来一些活力。 - Thang Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接