1、什么是EL表达式
EL表达式的全称是Expression Language,它是一种借鉴了JavaScript和XPath的表达式语言。EL表达式定义了一系列的隐含对象和操作符,使开发人员能够很方便地访问页面的上下文,以及不同作用域内的对象,而无需再JSP页面嵌入Java代码(小脚本、表达式等),从而使开发人员即使不熟悉java也能轻松地编写JSP程序。
2、EL表达式的特点和适用范围
1)自动转类型。在使用EL得到某个数据时可以自动转换类型,对于类型的限制比较宽松。
2)使用简单 。
3、EL表达式的语法
El表达式的语法有两个要素:$ 和 { } ,两者缺一不可。
1)点操作符
EL表达式通常有两部分组成:对象和属性。就像Java代码中一样,在EL表达式中也可以用点操作符" . "来访问对象。例如,通过${Dog.name}可以访问Dog对象中的name属性(直接 .name就可以,不用setter或者getter啥的)。而且可以一直往后去 . 有多少点多少。
2) [ ] 操作符
与点操作符类似,"[ ]"操作符也可以访问对象的某个属性,如${Dog["name"]}可以直接访问狗的名字属性。但是,除此之外,"[ ]" 操作符还提供更加强大的功能。
>当属性名中如果包含了特殊字符如" . "或" -"等的情况下,就不能使用点操作符来访问,这时只能使用"[ ]"操作符。
>访问数组,如果有一个对象名为array的数组,那么可以根据索引值来访问其中的元素,如${array[0]}、${array[1]}等。
>"[ ]"操作符中可以使用变量实现动态访问,如${Dog[dogname]},dogname是另一个变量,改变其值可以动态访问Dog的不同属性(有点像多态)
3)关系操作符
在EL表达式中,有六个关系操作符。
> 或者 gt,大于, 例如:${8>9} 或者 ${8 gt 9 }
< 或者 lt, 小于 , 例如:${4<9} 或者 ${4 lt 9 }
>= 或者 ge,大于等于, 例如:${45>=9} 或者 ${45 ge 9 }
<= 或者 le,小于等于, 例如:${9<=8} 或者 ${9 le 8 }
== 或者 eq,等于, 例如:${4==4} 或者 ${4 eq 4 }
!= 或者 ne, 不等于,例如:${4!=3} 或者 ${4 ne 3 }
返回值为true or false;
4)逻辑操作符
在EL表达式中,有三个逻辑运算符。
&& 或 and , 逻辑与,例如:如果A为true,B为false,则${A && B} 或${A and B}。 结果为false
|| 或 or , 逻辑或,例如:如果A为true,B为false,则${A || B} 或${A or B}。 结果为true
! 或 not , 逻辑非,例如:如果A为true,则${!A} 或 ${not A}。 结果为false
5)Empty操作符
Empty操作符是一个前缀操作符,用于检测一个变量值是否为null 或者 为empty (如长度为0的字符串变量或集合变量)。例如,变量a不存在,则${empty a}的返回结果为true,${not empty a}或${! empty a}返回的结果为false。
4、EL表达式隐式对象
1)pageContext对象
EL表达式中的pageContext隐式对象与JSP页面中的pageContext对象相对应,EL表达式可以通过pageContext隐式对象访问其它JSP隐式对象,如访问request、response对象属性时,可以使用表达式${pageContext.request.requestURI}表达式${pageContext.response.contentType}等。
2)代表特定域属性的隐式对象
在EL表达式中也可以不使用这些隐式对象来指定查找域,而是直接引用这些域中的属性名称。例如,表达式${userName}就会在page、request、session、application这四个作用域内按顺序依次查找userName属性,直到找到为止。
3)代表请求参数的隐式对象
Param隐式对象用于返回一个请求参数的某个值,如果同一个请求参数有多个值,则返回第一个参数的值。paramValues隐式对象用于返回一个请求参数的所有值,返回结果为该参数的所有值组成的字符串数组,例如表达式${paramValues.username[0]}用于返回数组中第一个元素的值。