葵花宝典 十三 EL表达式

来源:互联网 发布:total recall mac 编辑:程序博客网 时间:2024/05/18 22:17

EL表达式的概念、作用、语法
JSP主要的作用是实现动态页面,而动态页面中最主要的作用就是把数据动态显示。

目前,JSP中显示数据主要用表达式实现,即<%=%>

可以说,EL(Expression Language)表达式语言,就是用来替代<%= %>的,EL比<%=%>更简洁,更方便。

EL的基本语法是以usernameEL{param.username},param是EL中的内置对象,后续学习。
表达式:<%=request.getParameter(“username”)%>
除了语法不同,EL更为“贴心”,当username为null时,EL就不显示。而表达式会显示null

EL内置对象
为了能够方便地输出数据,EL提供了11个内置对象,其中
2个内置对象为了方便输出请求参数
4个内置对象为了方便输出各个范围的属性
2个与请求头有关的内置对象
2个其他内置对象:cookie、initParam
1个特殊的内置对象pageContext

1、与请求参数有关的内置对象
EL中有两个与请求参数有关的内置对象
param用来输出请求参数的值,格式为param.使<使EL{param.name}
上述代码将输出请求参数name的值。
paramValues:用来获取一对多的参数值,返回一个数组。比如某请求参数是通过checkbox传递的,名字为hobbies,要输出所有hobbies值中的第一个值,可以使用如下两种方式:
使用表达式:<%=request.getParameterValues(“hobbies”)[0]%>
使用EL:${paramValues.hobbies[0]}
2、与属性有关的内置对象

有属性有关的内置对象有四个
pageScope:页面范围,即pageContext范围
requestScope:请求范围
sessionScope:会话范围
applicationScope:上下文范围
获得名字为user的请求属性的pwd属性值
requestScope.user.pwd<{user.pwd}
当不指定范围时,将自动从pageScope开始查找,直到applicationScope,如果没查到,则什么也不显示

3、与请求头有关的内置对象
${header.accept} 输出请求头accept的值

headerValues:如果某个请求头的值有多个,则使用headerValues返回一个数组。如下代码所示:
${headerValues.cookie[0]}
上述代码将返回请求头cookie中的第一个值,例如:
JSESSIONID=A6A22CA4AEE8F9E1111422C889740B24

4、其他两个内置对象:cookie、initParam
cookie:用来获取cookie的值,如下代码所示:
${cookie.JSESSIONID.value}
上述代码将输出名字为JSESSIONID的cookie的值。

initParam:用来输入上下文参数的值
在web.xml中配置上下文参数

path
/WEB-INF/props


${initParam.path}

5、最特殊的内置对象:pageContext
EL中的pageContext对象可以调用PageContext类中所有符合规范的getXxx方法,如PageContext类中有如下方法:
public abstract ServletRequest getRequest()
可以通过如下EL调用该方法:
${pageContext.request}
该方法将输出请求对象,如下所示:
org.apache.catalina.core.ApplicationHttpRequest@1b98cbb

既然该EL返回的是真正的请求对象,那么就可以继续调用HttpServletRequest中的其他getXxx方法,如:
${pageContext.request.remoteAddr}
上述表达式将调用请求中的getRemoteAddr方法,输出其返回值,例如:
127.0.0.1

EL运算符
EL提供了多种运算符
算术运算符
比较运算符
逻辑运算符
其他运算符
EL中支持五种算术运算符,有+,实现加法运算;- 实现减法运算;* 实现乘法运算;/或div实现除法运算;%或mod实现求模运算。如下代码所示:
算术运算符
19+2{19-2}
192{19/2}
${19%2}

比较运算符
EL中有6种比较运算符,可以对值进行比较,返回值为true或fasle。
= = 或eq表示等于
!= 或ne表示不等于
< 或lt表示小于

或gt表示大于
<= 或le表示小于等于
= 或ge表示大于等于

EL中提供了3个逻辑运算符,可以对boolean类型的值进行运算,返回值为true或false。
&&或and表示交集,两个值都是true才返回true。
||或or表示并集,两个值只要有一个是true,即返回true。
!或not表示非

EL中除了有上面学习的算术、比较、逻辑运算符外,还有三种其他运算符。
empty运算符:判断值是否为null,如果是null,返回true,否则返回false。
关系运算符:${A?B:C}如果A为true,则执行B,如果A为false,则执行C。
()运算符:通过()可改变优先级。

EL中虽然提供了运算符,但是目前看没有太大意义,不可能直接输出一些运算结果,而往往运算结果将作为流程控制使用。

EL不能实现流程控制,需要结合JSTL使用,后续学习。
EL提供.和[]两种操作符来获得数据,
requestScope.cust2.custname{requestScope[“cust2”][“custname”]}

在某些情况下,却只能使用[]。
数组或集合的索引,如:
paramValues.hobbies[0]{requestScope.list[1].custname}
属性值中包括-或者.等非字母或数字的字符。
不合法的EL:param.usernameEL{param[“user_name”]}
值得注意的是,常量可以使用“”引用,也可以用单引号‘’引用。
属性值不是常量,而是变量。如paramName是变量,其具体值可能是name,可能是date等。
不合法的EL:param.paramNameEL{param[paramName]}

自动类型转换
EL除了可以方便的获取数据外,还可以方便地进行数据类型转换,如:
${param.count+10}
param.count获取的是请求参数,为String类型,可以直接与整数10进行数学运算,不需要类型转换,EL自动对其进行了类型转换

对null 的处理
在EL中,对null值不显示,也不会抛出异常

在表达式中,对null值要么直接显示,要么抛出异常

原创粉丝点击