EL表达式
语法: ${域中数据的名称}
EL的主要作用
- 获取数据
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据
(某个web域中的对象,访问javabeam属性、访问list集合、访问map集合、访问数组)
- 执行算法
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成
一些简单的逻辑运算。${user==null}
- 获取web开发常用对象
EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而
获得这些对象中的数据。
- 调用java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法
获取数据
- 使用EL表达式获取数据语法: "${标识符}" EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回(注意,返回不是null,而是空字符串)
- EL表达式也可以轻松获取JavaBean的属性,或获取数组、collection、Map类型集合的数据,例如:
- ${user.adress.city}
- ${user.list[0]}:访问有序集合某个位置的元素
- ${map.key}:获得map集合中指定的key值
执行算法
获得web开发常用对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取
这些对象的数据。
语法:${隐式对象的名称}:获得对象的引用
总结EL表达式的数据来源
- 获取域中数据
${域中数据的名称}
${scope.数据名称}
//从指定域中获取数据: ${scope.属性名称}
/*
pageScope------->pageContext
requestScope
sessionScope
applicationScope
*/
//代码
<%
session.setAttribute("name", "session");
request.setAttribute("name", "request");
pageContext.setAttribute("name", "page");
application.setAttribute("name", "application");
%>
${name} //结果 page
/*
总结:同时在域中获取数据且数据名称一样,数据影响的范围越小,则优先级越高
*/
//从指定域中获取数据
session: ${sessionScope.name}
request: ${requestScope.name}
pageContext ${pageScope.name}
application ${applicationScope.name}
//获取JavaBean中的数据
<%
User user1 = new User(11,"张三");
request.setAttribute("user",user1);
%>
<--
${user}:获取到存入域中的对象
${user.name}:获取到对象的的name属性
-->
name:${user.name} //相当于user.getName
<br/>
password: ${user.password}
获取集合中的数据
<%User user1 = new User(11,"张三","123");
User user2 = new User(12,"李四","12");
User user3 = new User(13,"王五","1");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
request.setAttribute("list",users);
%>
${list} :获取到域中的对象
${list[1]}:获取集合中的某个元素
${list[1].name}:获取对象的属性
<%
Map<String,User> map1 = new HashMap<>();
map1.put("user1", user1);
map1.put("user2",user2);
map1.put("user3", user3);
request.setAttribute("map", map1);
%>
${map} : 根据域中对象的名称,获取到map对象
<br/>
${map['key']}:根据对象的key值,获取的map中的对象
<br/>
name2: ${map['user2'].name }
<br/>
name1: ${map['user1'].name }
//结果
/*
[User [id=11, name=张三, password=12345], User [id=12, name=李四, password=12], User [id=13, name=王五, password=1]]
User [id=12, name=李四, password=12]
李四
{user1=User [id=11, name=张三, password=12345], user2=User [id=12, name=李四, password=12], user3=User [id=13, name=王五, password=1]}
User [id=11, name=张三, password=12345]
name2: 李四
name1: 张三
*/
2.获取请求参数中的数据
${param.参数名称} ----->getParamter();
${paramValues.参数名称} ----->getParamterValues()
name :${param.username}
<br/>
password:${param.password}
<br/>
${paramValues.hobby}:相当于使用request.getParamterValues() 得到参数组
${paramVAlues.hobby[1]} 根据索引获取数据
3.获取cookie中的数据
Cookie cookie = new Cookie("phone","125251252521");
response.addCookie(cookie);
cookie的value: ${cookie.phone.value}
cookie的name: ${cookie.phone.name}
4.获取请求头中的数据
host:${header.Host}
cookie: ${headerValues.Cookie[0]}
5.执行算法
<%
int a = 10;
pageContext.setAttribute("a", a);
int b = 5;
pageContext.setAttribute("b",b);
%>
${a + 20 }
<br/>
${a + b }
<br/>
${a mod b }
<br/>
${a % b }
<!-- mod 取模运算(取余数) -->
<hr/>
${a > b }
<br/>
${a != b }
<br/>
${a eq b }
<%
String str1 = null;
pageContext.setAttribute("str1", str1);
String str2 = "abc";
pageContext.setAttribute("str2", str2);
%>
<br/>
<hr/>
${str1 eq str2 }
<br/>
${str1 == null or str1 eq '' }
<br/>
<!-- empty 判断对象是否为空
既判断是否是空对象,也判断是否是“” -->
${empty str1 }
<br/>
${not empty str1 }