在JSP开发中,为了获取Servlet域对象中存储的数据,需要书写很多的Java代码,这样会使JSP页面看起来十分的混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是Expression Language的缩写,它是一种简单的数据访问语言。
文章目录
- 一、初识EL
- 二、EL中的运算符
- 1.点运算符(.)
- 2.方括号运算符([])
- 3.算术运算符
- 4.比较运算符
- 5.逻辑运算符
- 6.empty运算符
- 7.条件表达式
- 8.“()”运算符
- 三、EL隐式对象
一、初识EL
EL表达式的语法,都是用“${ }”表示的。
关于EL表达式和使用Java代码的区别:
在Servlet中:
request.setAttribute("username","zhangsan");
request.setAttribute("password","123");
- 在JSP中使用Java脚本:
用户名:<%=request.getAttribute("username")%><br />
密码: <%=request.getAttribute("password")%>
- 使用EL表达式
用户名:${username}<br />
密码: ${password}
EL表达式不仅能获取Servlet中存储的数据,也能简化JSP中的代码量,使程序简单易维护,另外,当域对象里面的值不存在时,使用EL表达式获取域对象里面的值返回空字符串;而使用Java脚本方式获取,返回值是null,会报空指针异常。
二、EL中的运算符
1.点运算符(.)
EL表达式中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象、List集合、Array数组等。
<!-- 访问user对象的username属性-->
${user.username}
2.方括号运算符([])
EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性。当获取的属性名中包含一些特殊符号,如“_”或“-”“?”等并非数字或字母的符号,就只能使用方括号运算符来访问该属性。
<!--不能使用${user.user_name}-->
${user["user_name"]}
- 点运算符和方括号运算符在某种情况下可以互换,如
${user.username}
等价于${user["username"]}
- 方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符,不能使用点运算符。
- 方括号运算符和点运算符可以相互结合使用,如
${users[0].username}
,表示访问集合或者数组中的第一个元素的username属性。
3.算术运算符
算数运算符 | 说明 | 算术表达式 | 结果 |
---|---|---|---|
+ | 加 | ${1+1} | 2 |
- | 减 | ${1-1} | 0 |
* | 乘 | ${1*1} | 1 |
/ (或div) | 除 | ${1/1}或${1 div 1} | 1 |
% (或mod) | 取余(取模) | ${1%1}或${1 mod 1} | 0 |
4.比较运算符
EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL表达式、EL变量,所有的运算执行结果都是布尔类型。
比较运算符 | 说明 | 算术表达式 | 结果 |
---|---|---|---|
==(或eq) | 等于 | ${10==2}或${10 eq 2} | false |
!=(或ne) | 不等于 | ${10!=2}或${10 ne 2} | true |
<(或lt) | 小于 | ${10<2}或${10 lt 2} | false |
>(或gt) | 大于 | ${10>2}或${10 gt 2} | true |
<=(或le) | 小于等于 | ${10<=2}或${10 le 2} | false |
>=(或ge) | 大于等于 | ${10>=2}或${10 ge 2} | true |
5.逻辑运算符
逻辑运算符 | 说明 | 算术表达式 | 结果 |
---|---|---|---|
&&(and) | 逻辑与 | ${true&&false}或${true and false} | false |
|| (or) | 逻辑或 | ${false||true} | true |
!(not) | 逻辑非 | ${!=true} 或${not true} | false |
6.empty运算符
EL表达式中的empty运算符用于判断某个对象是否为null或"",结果为布尔类型,其基本的语法格式如下:
${empty var}
- var变量不存在(没有定义),结果返回true
- var变量的值为null,结果返回true
- var变量引用集合(Set、Map、List)类型对象,并且在集合对象中不包含任何元素时,结果返回true
7.条件表达式
EL表达式中条件运算符用于执行某种条件判断,类似于Java中的if-else语句,其语法格式如下:
${A?B:C}
表达式A的计算结果为布尔类型:
- 如果表达式A的计算结果为true,就执行表达式B,并返回B的值
- 如果表达式A的计算结果为false,就执行表达式C,并返回C的值
8.“()”运算符
EL表达式中的圆括号用于改变其他运算符的优先级。
三、EL隐式对象
不需要new就能使用的对象,自带的对象
- 作用域访问对象(EL隐式对象):
pageScope、requestScope、sessionScope、applicationScope
- 参数访问对象
- JSP隐式对象
隐含对象名称 | 描述 |
---|---|
pageContext | 对应于JSP页面中的pageContext对象 |
pageScope | 代表page域中用于保存属性的Map对象 |
requestScope | 代表request域中用于保存属性的Map对象 |
sessionScope | 代表session域中用于保存属性的Map对象 |
applicationScope | 代表application域中用于保存属性的Map对象 |
param | 表示一个保存了所有请求参数的Map对象 |
paramValues | 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是String类型数组 |
header | 表示一个保存了所有HTTP请求头字段的Map对象 |
headerValues | 表示一个保存了所有HTTP请求头字段的Map对象,返回的是String类型数组 |
cookie | 用来取得使用者的cookie值,cookie的类型是Map |
initParam | 表示一个保存了所有Web应用初始化参数的Map对象 |