ChatGPT解决这个技术问题 Extra ChatGPT

JSP EL、JSF EL 和 Unified EL 之间的区别

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,请访问帮助中心。 9年前关闭。

我想知道表达式语言(EL)之间的详细区别。有 JSP EL、JSF EL 和 Unified EL。

我想知道 EL 背后的历史以及 Java EE 应用程序中使用的最新 EL 是什么。是最新版本中所有视图技术的通用 EL 吗?


B
BalusC

2002 年 6 月:JSTL 1.0 首次与 EL 一起引入。那些 ${} 东西只在 JSTL 标记中起作用。它旨在调用 Javabean 的 get 方法。

2003 年 11 月:引入了 JSP 2.0,并且 EL 在 javax.servlet.jsp.el 包中从 JSTL 1.0 移至 JSP 2.0,它成为标准 EL 作为 J2EE 1.4 标准的一部分。 JSTL 1.1 没有 EL。现在 ${} 也可以在 JSP 模板文本中的 JSTL 标记之外工作。

2004 年 3 月:JSF 1.0 在 javax.faces.el 包中引入了延迟 EL。那些 #{} 东西只在 JSF 标记中起作用。与标准 JSP EL ${} 的区别在于它不仅可以获取,还可以设置。这对于托管 bean 自动创建和设置输入组件的值是强制性的。标准 EL ${} 也适用于 JSF 输出标签,但如果它们在范围内尚不存在,它们将不会自动创建 bean,并且它们不会设置输入值。

2005 年 5 月:在为 2006 年 5 月发布的新 JSP 2.1 做准备的同时,延迟 EL #{} 从 JSF 中提取出来,并与 javax.el 包中的标准 EL ${} 结合。那时,它成为统一的 EL,它是随 JSF 1.2 引入的,后来成为 JSP 2.1 和 Java EE 5 标准的一部分。 #{} 现在也可以在 JSP 标记中用于获取值,但不能用于设置值。 ${} 现在可以在 JSP 中自动创建托管 bean,但不能设置值。

2006 年 11 月:Facelets 作为 JSP 的继任者被引入。它允许在 JSF 标记之外的模板文本中使用 #{},以替代没有任何属性的 。它还将 ${} 视为 #{},因此它们在 Facelets 中的行为相同。

2009 年 12 月:EL 从 JSP 规范中提取出来,成为一个独立的规范,将独立于 JSP 进行维护,第一个版本是 EL 2.2 (JSR-245),类似于 JSP 2.2。主要的新特性是调用参数化方法,而不是仅在 #{} 语法中调用 Javabean getter/setter,例如 #{bean.method(argument)}。此外,Facelets 成为 Java EE 6 标准的一部分。

2013 年 6 月:引入了 EL 3.0,它带有一个独立的 EL 处理器,允许在普通的 Java SE 应用程序中使用。其他主要的新特性是新的字符串连接运算符 +=、集合对象的新操作,包括流和 Lambda 表达式 ->(甚至在 Java 6/7 上!)以及将常量导入 EL 范围。


C
Community

添加到 BalusC 的答案...

EL 最初由 Art Technology Group 的 Nathan Abramson 于 2001 年构思并实施。当时该实施被称为最简单的可能表达语言 (SPEL)。该实现后来被包含在 JSTL1.0 中。 Nathan 是 JSR-052 Expert Group 的一员,并在 JSTL specification 中被认为是表达式语言背后的驱动力。

“特别提到 Nathan Abramson 是 JSTL 中引入的表达语言背后的推动力”