JSP EL,JSF EL和统一EL之间的区别

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

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

  • 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标签之外工作。

  • Mar 2004:在javax.faces.el包中引入了延迟EL的 JSF 1.0。 只有那些在JSF标签内部工作的东西。 与标准JSP EL ${}在于,它不仅可以get ,还可以进行set 。 这对于托pipebean自动创build和设置input组件的值是必需的。 标准EL ${}可以在JSF输出标签中使用,但是如果它们不在范围内,它们将不会自动创buildbean,并且它们不会设置input值。

  • 2005年5月:在准备将于2006年5月发布的新的JSP 2.1的同时,延迟EL #{}从JSF中提取,并与javax.el包中的标准EL ${}结合使用。 在这一点上,它成为了JSF 1.2引入的统一EL ,成为了JSP 2.1和Java EE 5标准的后续部分。 现在,也可以在JSP标签中使用#{}get值,但不能set值。 ${}现在可以在JSP中自动创build托pipe的bean,但不能set值。

  • 2006年11月:Facelets被引入作为JSP的继任者。 它允许在JSF标签之外的模板文本中使用#{} ,作为<h:outputText>替代,而不带任何属性。 它也将${}视为#{} ,所以它们在Facelets中performance相同。

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

  • 2013年6月:EL 3.0引入了独立的EL处理器,允许在普通的Java SE应用程序中使用。 其他主要的新function是新的string连接操作符+= ,集合对象的新操作,包括stream和Lambdaexpression式-> (甚至在Java 6/7!上)以及将常量导入EL范围。

添加到BalusC的答案…

EL最初由Art Technology Group的Nathan Abramson在2001年构思并实施,当时被称为最简单可能的expression语言(SPEL)。 这个实现后来被包含在JSTL1.0中。 Nathan是JSR-052专家组的一员 ,在JSTL规范中被认为是expression式语言背后的推动力。

“特别提到内森·艾布拉姆森(Nathan Abramson)是在JSTL中引入expression式语言背后的驱动力”