Java统一表达式语言(,简称JUEL)是一种特殊用途的编程语言,主要在Java Web应用程序用于将表达式嵌入到web页面。Java规范制定者和Java Web领域技术专家小组制定了统一的表达式语言。JUEL最初包含在JSP 2.1规范JSR-245中,后来成为Java EE 7的一部分,改在JSR-341中定义。
历史
表达式语言是以JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)的一部分出现的,原本被叫做SPEL(Simplest Possible Expression Language,简单的表达式语言),后来被称作EL(Expression Language,表达式语言)。它是一种脚本语言,允许通过JSP访问Java组件(JavaBeans)。自JSP 2.0以来,表达式语言已经被内置到JSP标签中,用于从JSP中分离Java代码,并允许(比用Java代码)更方便访问Java组件。
经过发展,表达式语言包含了更多的高级功能,并被包括在JSP 2.0规范内。对于有很少或几乎没有Java知识的网页内容设计者而言,脚本的编写变得更简单了。表达式语言使JSP变成了真正意义上的脚本语言。在表达式语言出现之前,JSP包含了一些特定的标签,Java代码直接的写在这些标签里。有了表达式语言,网页内容设计者只需明白如何做出适当的Java方法调用,而无需编写Java代码。
EL在语法和语义上类似于JavaScript表达式:
- 无需类型转换;转换通常是隐式的完成
- 双引号和单引号用法相同
- object.property与object['property']的意义相同
EL也解放了程序员,让程序员访问object.property时,不必清楚在访问值时涉及的细节。
JSP 2.0标准制定期间,JavaServer Faces标准的发布也需要一个表达式语言,但在JSP 2.0规范中定义的表达式语言不足以满足JSF技术发展的需要。最突出的限制是表达式是被立即执行的。同时,JSF组件还需要一种途径,来调用服务器端对象的方法。因而一个更强大的语言被制定出来,并具备以下新特性:
- 延期执行的表达式
- 表达式既可以设定数据,也可以获得数据
- 可以调用方法的方法表达式
新的表达式语言符合JSF的需求,但JSP EL和JSF EL之间并不兼容。统一表达式语言计划因此启动。在JSP 2.1中,JSP 2.0和JSF 1.1的表达式语言已经合并成一个统一表达式语言(EL 2.1)。
EL 3.0在[http://jcp.org/en/jsr/detail?id=341 JSR-341] 中从JSP和JSF规范中独立。新版本添加了一些新的特性,尤其是与Java 8的Streams和Lambda表达式相关的特性。
示例
下面是统一表达式语言的一个简单的例子:使用JSTL中“c:out”标签:
调用一个参数的方法的表达式:
${myBean.addNewOrder('orderName')}
实现
- [https://juel.sourceforge.net/ JUEL] 是一个统一表达式语言2.1版的开源实现。被认为是完整而稳定的,使用Apache许可协议2.0授权。JUEL也适用于非JSP应用。
- [https://web.archive.org/web/20140921054626/http://commons.apache.org/proper/commons-el/ Apache Commons EL]是来自于Apache的JSP 2.0 EL解释器。
参见
- OGNL - 一个被和Apache Struts 2使用的开源的表达式语言。
- MVEL - 一个被众多Java项目使用的开源的表达式语言。
- [http://commons.apache.org/proper/commons-jexl/ Apache Commons JEXL] - 一个旨在促进Java项目实现动态和脚本功能的开源的表达式语言。
- [https://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html SpEL] - Spring表达式语言,一个开源的EL表达式语言,是Spring Framework的一部分。它主要用于Spring portfolio项目,但也可以用于其他项目。
参考文献
外部链接
*[http://www.jcp.org/en/jsr/detail?id=245 JSR 245: JavaServer Pages 2.1]
*[http://www.oracle.com/technetwork/java/unifiedel-139263.html 统一表达式语言] (Sun Developer Network(SDN)上的文章)
*[https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html#wp71019 表达式语言]
*[https://web.archive.org/web/20070208013330/http://today.java.net/pub/a/today/2006/03/07/unified-jsp-jsf-expression-language.html JSP和JSF的统一的表达式语言](java.net上的文章)
*[http://juel.sourceforge.net JUEL] 是统一表达式语言(EL)的实现,并成为JSP 2.1标准(JSR-245)的一部分
评论 (0)