首页 > 代码库 > EL表达式

EL表达式

EL表达式就是为替换<%=%>页面输出的

EL表达式和<%=%>有一丢丢区别,EL表达式只能取WEB域中的值

 九个内置对象:

 WEB域:

page/pageContext 只是在当前页面有效

request 在一次请求当中有效

session  在一次会话当中有效

application 在整个服务器当中有效

setAttribute(存值) getAttribute(取值)

WEB域: response,out,exception,config

${key}取值的时候,如果是有很多相同的web域存了相同的key,那么它会从最小的范围开始查找,找到之后即可返回,不在往下继续查找!

config

下面介绍一下EL表达式的相关内容:

(1).与 [ ] 运算符

  EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

  ${sessionScope.user.sex}等于${sessionScope.user["sex"]}

  . 和 [ ] 也可以同时混合使用,如下:

  ${sessionScope.shoppingCart[0].price}

  回传结果为shoppingCart中第一项物品的价格。

  不过,以下两种情况,两者会有差异:

  (1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }

  上述是不正确的方式,应当改为:${user["My-Name"] }

  (2) 我们来考虑下列情况:

  ${sessionScope.user[data]}

  此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

  假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,如后台存在Map,类,数组等之类的数据就可以用上述的方法来做,但无法做到动态取值。

(2)算术运算符

  + 注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${‘a‘+‘b‘}则会出现异常。 例如:${6+6}
  - 例如:${4-3}
  * 例如:${4*3}
  / 例如:${9/3} 
  div 例如:${ 3 div 4}
  % 例如: ${3%4}
  mod ${10 mod 4}
  注意到表达式语言还支持div、mod等运算符。而且表达式语言把所有数值都当成浮点数处理,所以3/0的实质是3.0/0.0,得到结果应该是Infinity。
2.关系运算符
 
> gt 例如:${8>9}
>= ge 例如:${45>=9}
< lt 例如:${4<9}
<= le 例如:${9<=8}
== eq 例如:${4==4}
!= ne 例如:${4!=3}
 
表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。

注意:在使用EL 关系运算符时,不能够写成:
${param.password1} = = ${param.password2}
或者
${ ${param.password1 } = = ${ param.password2 } }
而应写成
${ param.password1 = = param.password2 }
3.逻辑运算符
 
&&  and 例如:${false && false}
||  or 例如:${true || false}
!   not 例如:${!true}相当于${false}
4.三元运算符
 
? : 例如:${3>2?‘是‘:‘不是‘}
在EL表达式中还有一些特殊运算符:
 
empty 判断EL表达式中的表达式是否为空(NULL,空字符串,空集合),例如:${empty sessionScope.user}
. 是我们最常用的,作用相当于执行Bean中的get方法。 例如:${sessionScope.user.userName}意思是:在会话中得到名称为user的Bean对象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性的值。
[] 作用和“.”运算符的一样,只不过[]运算符可以执行一些不规则的标识符。 例如:${requestScope.user["score-math"]},这个表达式中有不规则的标识符,是不能使用“.”来访问的。
在EL表达式中为我们提供了许多内置对象,使我们很方便的得到我们想要的数据:
 
1.从隐式对象中得到数据:
 
pageScope 例如:${pageScope.user.userName} 相当于<%=page.getAttribute("user").getUserName%>
requestScope 例如:${requestScope.books} 相当于<%=request.getAttribute("books")%>
sessionScope 例如:${sessionScope.lastURL} 相当于<%=session.getAttribute("lastURL")%>
applicationScope 例如:${applicationScope.provice} 相当于<%=application.getAttribute("provice")%>
2.从请求头中得到数据:
 
header 例如:${header.referer}得到请求过来的URL
3.访问JSP页面中的内置对象:
 
pageContext 例如:${pageContext.request}在EL表达式中我们是不能直接使用JSP页面的内置对象,但可以是用pageContext间接得到这些内置对象,再来使用。
如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。

EL表达式