一、EL表达式简介
EL 全名为Expression Language。EL主要作用:
1、获取数据
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
2、执行运算
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
3、获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
4、调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
1.1、获取数据
使用EL表达式获取数据语法:"${标识符}"
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。
EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据
el表达式获取数据案例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="waf.yty.domain.Address" %>
<%@ page import="waf.yty.domain.Person" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>孤傲苍狼UPUP</title>
</head>
<%
request.setAttribute("name","孤傲苍狼");
Person p = new Person();
p.setAge(12);
p.setName("杨腾宇");
request.setAttribute("p",p);
Person person = new Person();
Address address = new Address();
address.setStreet("大庆中学");
address.setName("长青二区");
person.setAddress(address);
request.setAttribute("person",person);
%>
<body>
使用EL表达式获取数据:${name} <hr>
使用el表达式可以获取bean的属性:${p.age}<br>${p.name}<hr>
使用el表达式可以获取bean的属性的属性:${person.address.name}<br> ${person.address.street}<hr>
<%
Person p1 = new Person();
p1.setName("荒漠迷城");
Person p2 = new Person();
p2.setName("死城之谜");
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
request.setAttribute("list", list);
%>
${list[1].name }<br>
${list[0].name }<hr>
<c:forEach var="person" items="${list }">
${person.name }
</c:forEach>
<hr>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("a","AAA");
map.put("b","BBB");
map.put("c","CCC");
map.put("d","DDD");
pageContext.setAttribute("map", map);
%>
${map.c }
${map["a"] }
<hr>
<c:forEach var="me" items="${map }">
${me.key } = ${me.value }<br>
</c:forEach>
<hr>
</body>
</html>
1.2、执行运算
语法:${运算表达式},EL表达式支持如下运算符:
1、关系运算符
2、逻辑运算符
3、empty运算符:检查对象是否为null(空)
4、二元表达式:${user!=null?user.name :""}
5、[ ] 和 . 号运算符
使用EL表达式执行运算范例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="waf.yty.domain.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>孤傲苍狼ELTest3</title>
</head>
<body>
<h3>表达式进行四则运算:</h3>
加法:${365+24 }<br>
减法:${365-24 }<br>
乘法:${365*24 }<br>
除法:${365/24 }<br>
<h3>EL表达式进行关系运算:</h3>
${user == null }
${user eq null }
<h3>EL表达式使用empty运算符检查对象是否为null</h3>
<%
List<String> list = new ArrayList<String>();
list.add("WAF");
list.add("YTY");
request.setAttribute("list", list);
%>
<c:if test="${!empty(list) }">
<c:forEach var="str" items="${list }">
${str }<br>
</c:forEach>
</c:if>
<hr>
<%
List<String> emptyList = null;
%>
<c:if test="${empty(emptyList) }">
对不起,今日锅盔已售罄!
</c:if>
<hr>
<h3>EL表达式中使用二元表达式</h3>
<%
session.setAttribute("user", new User("炼狱小镇"));
%>
${user==null? "对不起,您没有登录" : user.username }
<hr>
<h3>EL表达式数据回显</h3>
</body>
</html>
1.3、获得web开发常用对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
语法:${隐式对象名称}:获得对象的引用
序号 | 隐含对象名称 | 描 述 |
1 | pageContext | 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。) |
2 | pageScope | 代表page域中用于保存属性的Map对象 |
3 | requestScope | 代表request域中用于保存属性的Map对象 |
4 | sessionScope | 代表session域中用于保存属性的Map对象 |
5 | applicationScope | 代表application域中用于保存属性的Map对象 |
6 | param | 表示一个保存了所有请求参数的Map对象 |
7 | paramValues | 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[] |
8 | header | 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”] |
9 | headerValues | 表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”] |
10 | cookie | 表示一个保存了所有cookie的Map对象 |
11 | initParam | 表示一个保存了所有web应用初始化参数的map对象 |
1.4、使用EL调用Java方法
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}
在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
1.6、EL表达式保留关键字
所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。