7.1 EL 概述
EL是Expression Language(表达式语言)的英文缩写。EL最初是在JSTL(JSP Standard Tag Library)1.0中定义的。有了EL,使得网页设计人员无需精通更复杂的编程语言(如Java)就可以访问和操作应用程序数据。为了使EL更加成功,Sun公司从JSTL1.1开始将EL从JSTL中剥离出来,使其成为JSP2.0规范的单独的一部分,并为EL增加了很多新的功能。
EL表达式是一种被设计用来满足表现层需求的语言,基本语法格式为“${表达式}”。当JSP引擎在翻译JSP页面的过程中遇到“${表达式}”这样的字符串时,JSP引擎就会将“${...}”中的内容提取出来作为EL表达式来处理。“${表达式}”中的表达式必须符合EL的语法,该语法具有如下特点:
1. 在EL表达式中可以直接引用Java变量,并且可以通过嵌套属性的方式访问Java对象中的属性,如下面的代码如下:
<jsp:useBean id="date" class="java.util.Date"/>
<!-- 访问date变量 -->
${date}
<jsp:useBean id="myBean" class="chapter6.MyBean"/>
<jsp:setProperty property="age" name = "myBean" value="20" />
<!-- 通过嵌套属性方式访问myBean对象的age属性 -->
${myBean.age}
2. 在EL表达式中可以执行基本的关系运算、逻辑运算、算术运算、条件运算,并且可以使用empty操作符。下面的EL表达式输出的结果为15.0:
${(4+5) * 20 / 12}
3. 在EL表达式中可以使用自定义函数来完成一些更复杂的工作。EL表达式的自定义函数由Java语言编写。实际上,一个自定义函数就是一个Java类的静态方法。如下面的EL表达式调用了一个自定义函数:
${fun:invoke("abcd")}
其中fun是invoke所在类的别名,invoke是自定义函数名,"abcd"是传递给自定义函数的参数。
4. 在EL表达式中提供了一系列的内置对象,如pageContext、requestScope等,通过这些内置对象,EL表达式可以访问JSP页面中的各种信息。如通过requestScope对象可以请求域中的属性信息。如果不使用EL表达式,要获得这些信息必须在JSP页面中编写复杂的Java代码。
5. EL表达式的语法非常宽松,尽量提供默认值和类型转换,以使得尽可能少地输出错误信息。
由于“${”是EL表达式的开始标记,因此,JSP引擎不会直接输出这个字符串。要想将“${”直接输出到客户端,需要对“$”字符使用反斜杠“\”对“$”字符进行转义。如要输出“An expression is ${(4 + 5) * 20}”,可以使用如下的代码:
An expression is \${(4+5)*20}
如果“${”作为“${...}”内部的表达式,如可以使用如下的代码来输出“${”:
${"${"}(4+5)*20}