JSF vs Facelets vs JSP [重复]

Posted

技术标签:

【中文标题】JSF vs Facelets vs JSP [重复]【英文标题】:JSF vs Facelets vs JSP [duplicate] 【发布时间】:2011-06-16 11:43:10 【问题描述】:

对于 Java Server Faces 与所谓的 facelets 之间的具体区别,我似乎无法得到明确的答案。谁能给我一个清晰的答案?!?

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

    JSF 是 JSP 的替代品;和

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

那是什么?逻辑表明它几乎肯定不能两者兼而有之!

【问题讨论】:

您将在以下位置找到答案:realdevelopers.com/blog/development/facelets-vs-jsp 另请查看:ibm.com/developerworks/java/library/j-facelets 相关:What's the difference between JSF, Servlet and JSP?. 【参考方案1】:

来自Wikipedia article(JSF)

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

JSF 是 Web 框架,Facelet 是 JSF 的视图模板

来自Wikipedia article(JSP)

JavaServer Pages (JSP) 是一种 Java 技术,可帮助软件开发人员提供基于 html、XML 的动态生成网页,

也看这个话题Difference between jsf and jsp

【讨论】:

所以,如果我理解正确的话:JSF 由所有组件标签库、转换器类、验证器类等组成,而“facelet”只是使用这些组件标签并绑定的 XHTML 文件支持豆子?【参考方案2】: JSF 是基于 MVC 模式的 Web UI 标准化 Java 框架 JSP 是从模板生成网页的(更早的)标准 - 这些可以用作 JSF 应用程序中的视图,但也可以独立于 JSF。 Facelets 是一种替代视图技术,它基于 JSF 标准的第 2 版引入的纯 XML 模板(无脚本)。它们只能在 JSF 应用程序中使用。

有鉴于此,让我们来看看您的相互矛盾的陈述:

JSF 是 JSP 的替代品;和

不完全正确,因为 JSF 可以将 JSP 用于其视图(并且在 JSF 2 之前必须这样做)。但是,使用 Facelets 的 JSF 应用程序可以被视为基于 JSP 的技术的替代品。

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

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

【讨论】:

@Pam:不,“scriptlets”是指嵌入在 JSP 中的 java 代码 sn-ps。长期以来,这些都被人们所反对,标签库和 EL 作为更清洁的替代品。 Facelet 标准完全消除了它们。支持 bean(或扮演其角色的 EJB)仍然是基于 Facelets 的 JSF 应用程序的重要组成部分。 需要注意的是,您也可以在 JSF 1.2 中使用 Facelets,只要添加适当的库即可。 Ahhhh..... 所以:FaceletServlet 是控制器,Facelet 是 XHTML 视图,模型是 bean。最后三个问题:(1)我假设,与 servlet 一样,必须继承 FaceletServlet 并覆盖 service(HttpRequest,HttpResponse) 方法,是吗? (2) 最佳实践是否规定每个网页 1 个 FaceletServlet?我无法想象任何其他方式! (3) 模型是@ManagedBean (EJB)、JavaBean 还是任何 POJO?谢谢! @Pam: 1+2) 您通常从不直接在 JSF 应用程序中处理 servlet。相反,您在 faces-config.xml 中进行了配置,并在各种类上进行了注释,这些类控制了 FacesServlet 的功能。 3) @ManagedBean 是 JSF 特有的注解。从 JEE 6 开始,您也可以直接使用 EJB(具有不同的注解),但现在两者都是基于 JavaBean 标准的 POJO。如果不想使用注解,可以在 faces-config.xml 中声明托管 bean,但 JSF 需要被告知它们是什么somewhere 谢谢 Michael - 如果您不直接在 JSF 中处理 servlet,那么您将业务逻辑(控制)放在哪里?这是否进入“支持豆”?每个 JSF 应用程序只有一个 face-config.xml 文件,还是每个网页(Facelet)都有自己的 XML 配置?再次感谢...我发誓我开始明白了!【参考方案3】:

我一直在寻找相同问题的答案。 我发现这些链接很有帮助:

JSP 应用模型示例: http://netbeans.org/kb/docs/javaee/ecommerce/design.html#architecture

基本的 JSF 概念,一些例子: http://netbeans.org/kb/docs/javaee/ecommerce/conclusion.html#framework

【讨论】:

【参考方案4】:

Java 服务器页面 (JSP) 是一种 Java 技术,它使 Web 开发人员和设计人员能够利用现有业务系统快速开发和轻松维护信息丰富的动态 Web 页面。 JSP 技术将用户界面与内容生成分开,使设计人员能够在不改变底层动态内容的情况下更改整体页面布局。

Facelets 是第一个为 JSF (Java Server Faces) 设计的非 JSP 页面声明语言,与 JSP 相比,它为 JSF 开发人员提供了更简单、更强大的编程模型.它解决了在 JSP 中用于 Web 应用程序开发的不同问题。

这是一个比较 scriplet 和 facelets 的特征的表格:

Source

【讨论】:

以上是关于JSF vs Facelets vs JSP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

找不到 http://java.sun.com/jsf/facelets 的标记库描述符

Facelets 页面是不是像 JSP 生成到 Servlet 一样生成到 Servlet

如何创建自定义 Facelets 标签?

JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?

JSF,facelets 上的 actionlistener

JSF/Facelets/JSTL 条件显示最佳实践