JSF与Facelets与JSP的比较

109

我似乎找不到一个明确的答案来解释Java服务器 Faces和所谓的facelets之间的具体区别。有人能给我一个清晰易懂的答案吗?!?

此外,我知道JSF或JSP都可以用于创建动态网页,但两个看似相互矛盾的细节让我感到困惑。我听到过以下两种说法:

  1. JSF是JSP的替代品;以及

  2. JSF和JSP在Java的Web层MVC范例中形成不同的视图(View)部分。

那么,到底是哪一个呢?逻辑上讲,这两个说法肯定不可能同时成立!


2
你可以在这里找到答案:http://www.realdevelopers.com/blog/development/facelets-vs-jsp 还可以看看这个链接:http://www.ibm.com/developerworks/java/library/j-facelets/ - Harry Joy
4个回答

133
  • JSF是基于MVC模式的标准化Java Web UI框架。
  • JSP是一种较早的用于从模板生成Web页面的标准技术-它们可以作为JSF应用程序中的视图,但也可以与JSF分开使用。
  • Facelets是一种纯XML模板(无脚本)的替代视图技术,是JSF标准版本2引入的。它们只能在JSF应用程序中使用。

基于这些信息,让我们看一下你的矛盾陈述:

JSF是JSP的替代品;

不完全正确,因为JSF可以使用JSP作为视图(在JSF 2之前必须如此)。然而,使用Facelets的JSF应用程序可以被看作是取代基于JSP的技术。

JSF和JSP构成Java Web层MVC范例中不同部分的视图

完全错误 - JSF覆盖整个MVC模式(虽然它可能与EJB重叠,因为两者都基于可以在同一类中混合的注释)。


2
@Pam:不,"scriptlets" 意味着嵌入在 JSP 中的 Java 代码片段。长期以来,这些已经被人们所反对,标签库和 EL 是更清晰的替代品。Facelet 标准完全消除了它们。支持 Bean(或 EJB 扮演其角色)仍然是基于 Facelets 的 JSF 应用程序的重要组成部分。 - Michael Borgwardt
1
需要注意的是,如果您添加了适当的库,您可以在JSF 1.2中同样使用Facelets。 - Joeri Hendrickx
4
啊啊啊……因此:FaceletServlet 是控制器,Facelet 是 XHTML 视图,模型是一个 bean。最后三个问题:(1)我假设,与 servlet 一样,必须子类化 FaceletServlet 并覆盖 service(HttpRequest,HttpResponse) 方法,是吗?(2)最佳实践是否规定每个网页应有 1 个 FaceletServlet?我无法想象其他情况!(3)模型是 @ManagedBean(EJB)、JavaBean 还是可以是任何 POJO?谢谢! - Eugie
3
@Pam:1+2)在JSF应用程序中,通常不直接处理servlet。相反,在faces-config.xml文件中有配置,并且在各种类上有注释,它们控制FacesServlet的行为。3)@ManagedBean是JSF特定的注释。自从JEE 6以来,你也可以直接使用EJB(其具有不同的注释),但两者现在都是基于JavaBean标准的POJO。如果你不想使用注释,可以在faces-config.xml文件中声明托管bean,但JSF需要在某个地方告诉它们是什么。 - Michael Borgwardt
1
@Ryan:人们也可以没有Facelets,你的观点是什么?如果你想要一个不同的Web框架,你知道该去哪里找。如果你想自己动手做,那也没问题。但是,似乎很愚蠢地拆除紧密集成的模板机制,然后重新实现你刚刚摆脱的大部分内容,即使你留下了你不喜欢的部分。我怀疑这并不像BalusC所说的那样简单。 - Michael Borgwardt
显示剩余8条评论

10

来自维基百科文章(JSF)

JSF是一种基于组件驱动的UI设计模型的请求驱动MVC web框架,使用名为视图模板或Facelets视图的XML文件。

JSF是Web框架,而Facelet是用于JSF的视图模板。

来自维基百科文章(JSP)

JavaServer Pages (JSP)是一种Java技术,可以帮助软件开发人员根据HTML、XML等动态生成网页。

还可以查看这个主题jsf和jsp之间的区别


1
所以,如果我理解正确:JSF包括所有组件标签库、转换器类、验证器类等,而“facelet”只是使用这些组件标签并绑定到后端bean的XHTML文件? - Pam

6
Java Server Pages (JSP)是一种Java技术,使Web开发人员和设计师能够快速开发和轻松维护信息丰富、动态的Web页面,利用现有的业务系统。JSP技术将用户界面与内容生成分离,使设计师能够更改整个页面布局而不改变基础动态内容。
Facelets是第一个非JSP页面声明语言,专为JSF(Java Server Faces)设计,为JSF开发人员提供了比JSP更简单、更强大的编程模型。它解决了JSP在Web应用程序开发中出现的不同问题。
下面是一个比较scriplets和facelets功能的表格: enter image description here Source

3

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