使用EL表达式
El概述:
EL是 Expression Language 的简称,意思是表达式语言,它是JSP2.0中引入的一种计算和输出java对象的简单语言。
使用EL表达式的前提条件:要求Web服务器能够支持Servlet 2.4 / JSP 2.0 规范。
JSP中禁用EL表达式的3种方法:
1、 使用斜杠 ” \ ” 符号。
具体语法为: \${expression}
注:该语法适合只是禁用页面中的一个或几个EL表达式的情况。
2、 使用page指令。
使用JSP中的page指令可以禁用EL表达式,语法格式如下:
<%@ page isELIgnored=true|false %>
注:该方法适合禁用一个页面中的EL表达式。
3、 在web.xml文件中配置<el-ignored>元素。
在web.xml中文件中配置<el-ignored>元素禁用EL表达式的具体代码如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
注:该方法适用于禁用web应用中的所有jsp页面中的EL表达式。
EL表达式的基本语法:
EL表达式语法以 “${” 开头,以 “}” 结束,中间为合法的表达式。语法格式如下:
<body>
${expression}
</body>
EL表达式的存取范围:
当EL表达式中的变量没有指定范围时,系统默认从page范围中查找,然后依次在request、session及appliction范围内查找。
在要输出表达式的前面加入指定存取范围的前缀即可指定该变量的存取范围。如图:
EL表达式中使用变量范围前缀
范围 | 前缀 | 举例说明 |
page | pageScope | ${pageScope. name}表示在page范围内查找变量name |
request | requestScope | ${requestScope. name}表示在requeste范围内查找变量name |
session | sessionScope | ${sessionScope. name}表示在session范围内查找变量name |
application | applicationScope | ${applictionScope. name}表示在application范围内查找变量name |
EL表达式的运算符:
EL表达式提供了存取数据运算符、算术运算符、关系运算符、逻辑运算符、条件运算符及empty运算符。
1、存取数据运算符。
在EL表达式中可以使用运算符 ”[]” 和 ”.” 来取得对象的属性。例如${user.name}或者${user[name]}都表示获取对象user中的name属性值。
在EL表达式中可以使用 ”[]” 运算符来读取数组、Map、List或者对象容器中的数据。
A、数组元素的获取
应用 ”[]” 运算符可以获取数组的指定元素。例如,在request域中保存一个包含5个元素的一维数组,并应用EL表达式获取数组中的第三个元素。代码如下:
<%
String[]username = {“小明”, “小东”,“小红”, “小丽”,“小柯”};
request.setAttribute(“user”,username);
%>
${requestScope.user[2]}
B、 List集合元素的获取
应用 ”[]” 运算符可以获取List集合中的指定元素。例如,在session域中保存一个包含3个元素的List集合对象,并应用EL表达式输出该集合的第2个元素。代码如下:
<%
Listlist = new ArrayList();
list.add(“小明”);
list.add(“小东”);
list.add(“小红”);
session.setAttribute(“userlist”,list);
%>
${sessionScope.userlist[1]}
C、Map集合元素的获取
应用 ”[]” 运算符可以获取Map集合中的指定元素。例如,在session域中保存一个3个键值的Map集合对象,并应用EL表达式输出该集合的第2个元素。代码如下:
<%
Mapmap = new HashMap();
map.put(“1”,”小明”);
map.put(“2”,”小东”);
map.put(“3”,”小红”);
application.setAttribute(“usermap”,map);
%>
${sessionScope.usermap[“2”]}
2、算术运算符:
EL表达式的算术运算符
运算符 | 功能 | 举例说明 |
+ | 加 | ${6+1}返回值为7 |
- | 减 | ${7-1}返回值为6 |
* | 乘 | ${11.5*10}返回值为115.0 |
/ 或div | 除 | ${8/2}或${8 div 2}返回值为4 |
% 或mod | 求余 | ${9%2}或${9 mod 2}返回值为1 |
3、关系运算符:
EL表达式的关系运算符
运算符 | 功能 | 举例说明 |
== 或eq | 等于 | ${2==1}或${2 eq 1}返回false ; ${“A”==”A”}返回true |
!= 或ne | 不等于 | ${2!=1}或${2 ne 1}返回true; ${“A”!=”A”}返回false |
< 或lt | 小于 | ${6<5}或${6 lt 5}返回false; ${“A”<”B”}返回true |
> 或gt | 大于 | ${6>5}或${6 gt 5}返回true; ${“A”>”B”}返回false |
<= 或le | 小于等于 | ${2<=1}或${2 le 1}返回false ${“A”<=”B”}返回true |
>= 或 ge | 大于等于 | ${2>=1}或${2 ge 1}返回true ${“A”>=”B”}返回false |
4、逻辑运算符:
A、&&或and运算符
&&或and运算符为与运算符,只有在两个操作数均为true时,结果才为true,否则为false。示例代码如下:
<body>
${username == “root” && password== “123”}
</body>
只有username为root,且password为123时,结果才为true。
B、|| 或or运算符
|| 或or运算符为或运算符,只要有一个操作数的值为true,结果就为true。只有全部操作数为false时,结果才为false。示例代码如下:
<body>
${username == “root” || password == “123”}
</body>
只要username为root,或password为123,结果就为true。
C、! 或not运算符
! 或 not运算符为非运算符,即对操作数进行取反。示例代码如下:
<body>
${! username == “root”}
</body>
5、empty运算符:
在EL表达式中,empty运算符位于操作数前方,被用来确定一个对象或变量是否为null或空。empty语法如下:
<body>
${empty expression}
</body>
注:一个变量或对象为null或空代表的是不同的意义,null表示这个变量没有指明任何对象,而空表示这个变量所属的对象的内容为空,如空字符串,空的数组或空的List容器。
6、条件运算符:
EL表达式中可以利用条件运算符进行条件求值,语法格式如下:
<body>
${empty user ? “user为空”: user}
</body>
运算符的优先级:
EL表达式各运算符的优先级
优先级 | 运算符 |
从
高
到
低 | [] |
() | |
- (负号)、not、!、empty | |
*、/、div、%、mod | |
+ (加号)、- (减号) | |
<、>、<=、>=、lt、gt、le、ge | |
==、!=、eq、nq | |
&&、and | |
||、or | |
? :/ |
EL表达式中的保留字:
EL表达式中的保留字
and | eq | gt | true | instanceof | div | or | ne |
le | false | lt | empty | mod | not | ge | null |
El表达式中的隐含对象:
EL表达式中的隐含对象
类别 | 隐含对象 | 说明 |
页面上下文对象 | pageContext | 用于访问JSP内置对象 |
访问环境信息的隐含对象 | param | 包含页面所有参数的名字和对应的值的集合 |
paramValues | 包含页面所有参数的名字和对应多个值的集合 | |
header | 包含每个header名和值的集合 | |
headerValues | 包含每个header名和可能的多个值的集合 | |
cookie | 包含每个cookie名和值的集合 | |
initParam | 包含Servlet上下文初始参数名和对应值的集合 | |
访问作用域范围的隐含对象 | pageScope | 包含page(页面)范围内的属性值的集合 |
requestScope | 包含request(请求)范围内的属性值的集合 | |
sessionScope | 包含session(会话)范围内的属性值的集合 | |
applicationScope | 包含application(应用)范围内的属性值的集合 |
1、pageContext对象
pageContext隐含对象用于访问Jsp内置对象,如request、response、session、out、config和ServletContext等。例如,要获取当前session中的变量username,EL表达式为:
<body>
${pageContext.session.username}
</body>
2、param和paramValues对象
param对象用于获取请求参数的值,如果一个参数名对应多个值,则需要使用paramValues对象获取请求参数的值。在应用param对象时,返回的结果为字符串;在应用paramValues对象时,返回的结果为数组。
3、header和headerValues对象
header对象用于获取HTTP请求的一个具体的header值,但在有些情况下,可能存在同一个header拥有多个不同的值,这时就需要使用headerValues对象。
4、访问作用域范围的隐含对象
EL表达式提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope、applicationScope,这4个对象用来查找特定作用域的标志符。例如,要获取session范围内user变量的值,EL表达式为:
<body>
${sessionScope.user}
</body>
5、cookie对象
6、initParam对象