EL表达式
EL表达式是Expression Language的简称(表达式语言),他是JSP2.0中引入的一种计算和输出Java对象的语言。只要安装的WEB服务器支持Servlet2.4/JSP2.0,就可以在JSP中直接使用EL表达式。
1.禁用EL表达式的三种方式
因为在JSP2.0之前并不支持EL表达式,为了兼容之前版本,所以特意提供了禁用EL表达式的功能。
(1)使用“\”
(2)使用page指令
<%@page isELIgnored=”true”%>这样在整个网页中都不会解析EL表达式。
//该方法将禁用整个页面的EL表达式。
(3)在web.xml文件中配置<el-ignored>标签
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>//该方法将禁用整个页面的EL表达式。
</jsp-property-group>
</jsp-config>
2.EL表达式的基本语法
EL表达式的语法很简单,${}。{}中间为合法的表达式。
在EL表达式中输出一个字符串:${“这是一个字符串”}。
3.EL表达式的使用
(1)EL表达式可获得PageContext对象,用它可以获得页面中的其他所有内置对象。
Eg:${PagContext.session.username}//获得session对象中的变量username。
(2)EL表达式不仅可以访问一般变量,而且可以访问JavaBean中的属性以及嵌套属性和集合对象。
(3)EL表达式中可以执行关系运算,逻辑运算和算术运算等。
4.EL表达式的存取范围
当EL表达式中没有指定范围时,系统默认从page范围中查找,然后依次在request,session,application范围内查找。如果找到则返回指定变量,否则返回null。而且EL表达式还提供了指定存取范围的方法,如果从指定范围找,在该范围没找到的话,直接返回null。
范围 | 前缀 | 案例 |
page | pageScope | ${pageScope.username} |
request | requestScope | ${requestScope.username} |
session | sessionScope | ${sessionScope.username} |
application | applicationScope | ${applcationScope.username} |
5.EL表达式的运算符
EL表达式提供了存取数据运算符,算术运算符,关系运算符,逻辑运算符,条件运算符以及empty运算符
5.1存取运算符“[]”和“.”
EL表达式可以使用“[]”和“.”来取得对象的属性。如:${user.username或者${user[username]},在有些情况只能使用[]。例如对于user中的属性user-name,就只可以用${user.[user-name]}。
[ ]运算符还可以用来读取数组,List,Map或者其他容器中的数据
<%
Map map=new HashMap();
Map.put(“1”,”a”)
Map.put(“2”,”b”)
Map.put(“3”,”c”);
session.setAttrubute(“demo”,map);
%>
${sessionScop.demo[“1”]}//输出集合中“1”所对应的值。注意,这里不是下标,是属性名
如果是数组或者是List,则可以用下标获取元素。
5.2算术运算符
+,-,*,/(div),%(mod)。用法都统Java,使用范围必须${}的{}中。Eg:${23.5*6}
注意:EL表达式不支持Java那样利用+连接两个字符串。但是可以采用${“he”}${“llo”}的形式。
5.3关系运算符
EL表达式提供了很多对于两个表达式(字符串/整数/浮点数)进行比较的关系运算符,返回值为true或者false。
运算符 | 功能 | 举例 |
==或eq | 等于 | ${10==10},${“A”==”a”} |
!=或ne | 不等于 | ${10!=10},${“A”!=”a”} |
<或lt | 小于 | ${10<10},${“A”<”a”} |
>或gt | 大于 | ${10>10},${“A”>”a”} |
<=或le | 小于等于 | ${10<=10},${“A”<=”a”} |
>=或ge | 大于等于 | ${10>=10},${“A”>=”a”} |
注意:
EL表达式的运算符只能用在{}中,例如:${param.name}==${pap.name}是错误的。
${param.name==pap.name}才是正确的。
5.4逻辑运算符
&&或者and表示”与”,||或者or表示”或”,!或者not表示”非”。
注意:与和或表达式只要可以确定值,就会停止执行。
5.5empy运算符
将empty运算符位于操作数前方,用来确定一个对象或者变量是否为空或者null。
Eg: ${empty expression}。 expression为需要判断的变量或对象。
注意:null和空不是一回事,null是表示该变量没有指向任何对象。而空则表示该变量已经分配了内存,但是该变量中存储的内容为空,例如空字符串等。 empty也经常和not一起使用,判断一个对象或者变量是否为空,例如:${not empty sessionScop.user}
5.6条件运算符
${表达式?表达式1:表达式2}
用法同Java,如果表达式为真,则执行表达式1,如果为假,则执行表达式2。
6.EL表达式中的隐含对象
EL中定义了11个隐含的对象(包括头信息,参数,全局初始化信息,pageContext,数据域对象,cookie)。
| 隐含对象 | 介绍 |
页面上下文对象 | pageContext | 用于访问JSP的其他内置对象 |
访问作用域范围内数据的隐含对象 | pageScope | 用于获取page(页面)范围的属性值的集合 |
requestScope | 用于获取requestScope(请求)范围的属性值的集合 | |
sessionScope | 用于获取page(会话)范围的属性值的集合 | |
applicationScope | 用于获取page(应用)范围的属性值的集合 | |
访问环境信息的隐含对象 | param | 包含页面所有参数的名称和相应值的集合 |
paramValues | 包含页面所有参数的名称和相应多个值的集合 | |
header | 包含每个header名和值的集合 | |
headerValues | 包含每个header名和可能存在的多个值的集合 | |
cookie | 包含每个cookie的名和值的集合 | |
initParam | 包含servlet上下文初始参数名和相应值得集合 |
说明:除了pageContext对象外,其余对象都是java.util.Map类型。
6.1 pageContext对象
该对象用于方位JSP中的内置对象,例如:${pageContext.session.user}
6.2访问作用域范围的对象
${XXXscope.user}
6.3 param和paramValues对象
param对象用于获得请求参数的值,返回类型为字符串,如果想获得一个参数名对应的多个参数值,返回类型为数组。
例如: <input type=”text” name=”username”>
username值得获取:${param.username}
如果是<input type=”checkbox” name=”user” value=”zhangsan”>
<input type=”checkbox” name=”user” value=”lisi”>
user值的获取:${paramValues.user[0]}----获得zhangsan。
${paramValues.user[0]}----获得lisi。
注意:对于获得的参数不存在时,返回的是空字符串而非null。
6.4header和headerValues
用于获得HTTP请求的头信息。header用于获得某一个,headerValues用于获得一个header值对应的多个值。
例如:${header.host},${header.[“host”]}。
6.5cookie对象
cookie对象用于获取请求携带的cookie。如果请求中携带了某个cookie(这里假设其中的一个cookie名为user,值为cocoliu),则可以使用${cookie.user}获取相应名的cookie。如想获取相应cookie的值,则需要${cookie.user.value}
6.6intParam对象
用于获取web应用全局初始化参数的值。
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
<context-param>
获取value值得方法:${initParam.password}