EL表达式
一、EL表达式简介
EL全名为Expression Language.EL主要作用:
1)获取数据:EL表达式主要用于替换Jsp页面中的脚本表达式,以从各种类型的Web域中检索Java对象、获取数据.(某个Web域中的对象、访问javaBean的属性、访问list集合、访问map集合、访问数组)
2)执行运算:利用EL表达式可以在Jsp页面中执行一些基本的关系运算、逻辑运算和算数运算,以在Jsp页面中完成一些简单的逻辑运算
3)获取Web开发常用对象:EL表达式定义了一些隐式对象,利用这些隐式对象,Web开发人员可以很轻松获得对Web常用对象的引用,从而获得这些对象中的数据.
4)调用Java方法:EL表达式允许用户开发自定义EL函数,以在Jsp页面中通过EL表达式调用Java类的方法.
获取数据:
EL表达式获取数据语法:"
标
识
符
"
;
E
L
表
达
式
在
执
行
时
会
调
用
p
a
g
e
C
o
n
t
e
x
t
.
f
i
n
d
A
t
t
r
i
b
u
t
e
方
法
,
用
标
识
符
为
关
键
字
,
分
别
从
p
a
g
e
、
r
e
q
u
e
s
t
、
s
e
s
s
i
o
n
、
a
p
p
l
i
c
a
t
i
o
n
四
个
域
中
查
找
响
应
的
对
象
,
找
到
则
返
回
相
应
对
象
,
找
不
到
则
返
回
"
"
(
不
是
n
u
l
l
,
是
空
字
符
串
)
.
E
L
表
达
式
也
可
以
很
轻
松
获
取
J
a
v
a
B
e
a
n
的
属
性
,
或
者
获
取
数
组
、
c
o
o
l
e
c
t
i
o
n
、
m
a
p
类
型
集
合
的
数
据
:
{标识符}";EL表达式在执行时会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找响应的对象,找到则返回相应对象,找不到则返回" "(不是null,是空字符串). EL表达式也可以很轻松获取JavaBean的属性,或者获取数组、coolection、map类型集合的数据:
标识符";EL表达式在执行时会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找响应的对象,找到则返回相应对象,找不到则返回""(不是null,是空字符串). EL表达式也可以很轻松获取JavaBean的属性,或者获取数组、coolection、map类型集合的数据: {user.address.province};
u
s
e
r
.
l
i
s
t
[
2
]
;
访
问
有
序
集
合
某
个
位
置
的
元
素
{user.list[2]}; 访问有序集合某个位置的元素
user.list[2]; 访问有序集合某个位置的元素 {map.key}; 获得map集合中指定key的值
执行运算:
语法:${运算表达式}
empty运算符:检查对象是否为null或"空".
获得Web开发常用对象:
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便的获取Web开发中一些常用对象,并读取这些对象的数据;语法:${隐式对象名称}来获取对象的引用
EL注意事项:
EL比到时是Jsp2.0规范中的一门技术,因此若想正确解析EL表达式,需使用支持Servlet2.4/Jsp2.0技术的Web服务器.有些Tomcat服务器不能使用EL表达式,可以升级成tomcat6以上,在Jsp中加入<%@page isELlgnored=“false”%>
测试:
people类
package com.aimuti.model;
public class People {
private String name;
public People() {
super();
// TODO Auto-generated constructor stub
}
public People(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
index.jsp
<body>
<%
request.setAttribute("name", "zhangsan");
pageContext.setAttribute("name", "lisi");
%>
<h1> ${name}</h1>
<!-- name取值,会按以下顺序从小范围到大范围去查找 -->
<!-- 1.pageScope 2.requestScope 3.sessionScope 4.applicationScope
如果按照以下顺序都没有查找到,就返回空字符串 -->
------ ${h} -------
<hr>
<!-- 可以通过域获取对应的值 -->
${requestScope.name}
<hr>
<%
People people = new People("zhangsan");
pageContext.setAttribute("user1", people);
%>
${user1.name }
<hr>
<%
People people2 = new People("zhangsan");
People people3 = new People("lisi");
List<People> list = new ArrayList<>();
list.add(people2);
list.add(people3);
pageContext.setAttribute("list", list);
%>
${list[1].name}
<hr>
<%
People people4 = new People("zhangsan");
People people5 = new People("lisi");
HashMap<String,People> map = new HashMap<>();
map.put("1", people4);
map.put("2", people5);
pageContext.setAttribute("map", map);
%>
${map['1'].name }
<%
pageContext.setAttribute("a", 2);
pageContext.setAttribute("b", 5);
String zhangsan = null;
pageContext.setAttribute("str", zhangsan);
%>
<!-- EL支持算数运算符 -->
${a+b} <!-- +-*/ -->
<!-- EL支持比较运算符 -->
${a>b} <!-- > < >= <= == -->
<!-- El支持逻辑运算符 -->
${a>1 && b<8}
${a>1 and b<10} <!-- and or -->
${str == null}
${str eq "123"} <!-- str.euqals("123") -->
<!-- 空判断 -->
${empty str} <!-- if(str == null || str.equals("")) -->
<!-- 非空判断 -->
${not empty str}
<hr>
</body>
register.jsp
<body>
<form action="index2.jsp" method="post">
name:<input type="text" name="username" /><br>
password:<input type="text" name="password"/><br>
favorite:<input type="checkbox" name="fav" value="abc"/>abc<br>
<input type="checkbox" name="fav" value="qwe"/>qwe<br>
<input type="submit" >
</form>
</body>
index2.jsp
<body>
<!-- EL支持通过参数取值,格式:${param.参数名} -->
<%
String[] favs = request.getParameterValues("fav");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
%>
name:${param.username}
password:${param.password}
<hr>
<!-- ${paramValues.参数名[index]} 取得的是参数名一样的一组值 -->
fav:${paramValues.fav[0]}
<hr>
<%
Cookie cookie = new Cookie("user","zhangsan");
response.addCookie(cookie);
%>
<!-- ${cookie对象.cookie名.name}
${cookie对象.cookie名.value} -->
${cookie.user.name}
${cookie.user.value}
<hr>
<!-- 从请求头获取数据 -->
${header.Host}
${headerValues.cookie[0]}
<hr>
</body>