ChatGPT解决这个技术问题 Extra ChatGPT

JSF vs Facelets vs JSP [重复]

这个问题在这里已经有了答案:JSF、Servlet 和 JSP 有什么区别? (16 个回答) 6 年前关闭。

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

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

JSF 是 JSP 的替代品; JSF 和 JSP 在 Java 的 Web 层 MVC 范式中构成 View 的不同部分

那么它是哪一个?逻辑表明它几乎可以肯定不能两者兼而有之!


M
Michael Borgwardt

JSF 是基于 MVC 模式的 Web UI 标准化 Java 框架

JSP 是从模板生成网页的(更老的)标准——它们可以用作 JSF 应用程序中的视图,也可以与 JSF 分开使用。

Facelets 是一种基于纯 XML 模板(无脚本)的替代视图技术,它是随 JSF 标准的第 2 版引入的。它们只能在 JSF 应用程序中使用。

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

JSF 是 JSP 的替代品;和

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

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

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


@Pam:不,“scriptlets”是指嵌入在 JSP 中的 java 代码片段。长期以来,这些都被人们所反对,标签库和 EL 作为更清洁的替代品。 Facelet 标准完全消除了它们。支持 bean(或扮演其角色的 EJB)在很大程度上仍然是基于 Facelets 的 JSF 应用程序的一部分。
应该注意的是,您也可以在 JSF 1.2 中使用 Facelets,只要添加适当的库即可。
啊……所以: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 需要在某处被告知它们是什么。
谢谢 Michael - 所以如果您不直接在 JSF 中处理 servlet,那么您将业务逻辑(控制)放在哪里?这是否进入“支持豆”?每个 JSF 应用程序只有一个 face-config.xml 文件,还是每个网页(Facelet)都有自己的 XML 配置?再次感谢...我发誓我开始明白了!
佚名

来自Wikipedia article(JSF)

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

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

来自Wikipedia article(JSP)

JavaServer Pages (JSP) 是一种 Java 技术,可帮助软件开发人员提供基于 HTML、XML、

另请查看此主题Difference between jsf and jsp


所以,如果我理解正确的话:JSF 由所有组件标记库、转换器类、验证器类等组成,而“facelet”只是使用这些组件标记并绑定到支持 bean 的 XHTML 文件?
Y
Yster

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

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

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

https://i.stack.imgur.com/FCaqL.png


D
Daniel

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

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

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