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、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}
注意:在使用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间接得到这些内置对象,再来使用。