1.1 什么是EL表达式,EL表达式的作用?
EL表达式的全称是Expression Language。它就是表达式语言。
EL表达式可以很好的替代表达式脚本在jsp页面上进行输出。
EL表达式的格式是:${ key }
EL表达式在输出null值的时候。输出的是空串
<%
request.setAttribute("abc", "value");
%>
表达式脚本:<%=request.getAttribute("abc") == null ? "" : request.getAttribute("abc") %>
EL表达式:${ abc }
1.2 EL 表达式搜索域数据的顺序
EL表达式主要是输出域对象中的数据
当四个域中都相同的数据的时候。使用EL表达式输出数据。EL表达式会从四个域中分别搜索。
搜索的顺序是 从小到大。
也就是 pageContext ----->>>> request ----->>>> session ----->>>> application
<%
// request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
// pageContext.setAttribute("key02-", "pageContext");
%>
${ key }
1.3 EL 表达式 输出Bean的普通属性,数组属性
a.)需求——输出Person类中普通属性,数组属性。list集合属性和map集合属性。
public class Person {
private int age;
private String[] phones;
private List list;
private Map map;
public String getAbc() {
return "abc";
}
}
jsp中的代码:
<%
//创建一个Person对象。并且把它保存到域对象中
Person person = new Person();
person.setAge(18);
person.setPhones(new String[]{"18610548888","18666668888","18699998888"});
List list = new ArrayList();
list.add("list1");
list.add("list2");
list.add("list3");
person.setList(list);
Map map = new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
person.setMap(map);
request.setAttribute("p", person);
%>
person的对象输出 ==>> ${ p }
person的age属性 ==>> ${ p.age }
person的phones属性 ==>> ${ p.phones[2] }
person的list属性 ==>> ${ p.list[2] }
person的map属性 ==>> ${ p.map.key3 }
person的abc属性 ==>> ${ p.abc }
注:${ p.age } p 表示一个Person对象.那么p.age 中的age表示找person对象的getAge方法(也就是读方法)
去掉Eclipse自动的一些较验。
1.4 EL 表达式 — — 运算
语法:${ 运算表达式 } , EL 表达式支持如下运算符:
(1)关系运算
(2)逻辑运算
(3)算数运算
(4)empty运算
empty运算可以判断el有达式中的数据值是否为空。如果为空,就返回true。非空就是false。
空的情况以下几种:
<%
// 1、值为null的时候。
request.setAttribute("emptyValue", null);
// 2、如果是Object数组,并且长度为零。
request.setAttribute("emptyArr", new Object[]{});
// 3、如果是空的字符串。
request.setAttribute("emptyStr", "");
// 4、如果是List集合的时候。并且元素个数为零
List list = new ArrayList();
// list.add("123");
request.setAttribute("emptyList", list);
// 5、如果是Map集合的时候。并且元素个数为零
Map map = new HashMap();
// map.put("erea", "asdf");
request.setAttribute("emptyMap", map);
%>
${ empty emptyValue }
${ empty emptyArr }
${ empty emptyStr }
${ empty emptyList }
${ empty emptyMap }
(5)元运算
表达式1 ? 表达式2 : 表达式3
如果表达式1的值为true.就返回表达式2的值,如果表达式1的值为false,就返回表达式3的值。
示例代码: ${ 12 == 12 ? "12等于12":"12不等于12" }
(6)“.”点运算 和 [] 中括号运算符
“.” 点运算 可以取个一个JavaBean对象的某个属性的值。或取得一个Map对象中某个指定key的值
[] 中括号运算 可以取得一个有序集合中指定下标的元素值。中括号运算,还可以取得Map集合中key里含有特殊字符的key的值。
<%
Map map = new HashMap();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
request.setAttribute("map", map);
%>
${ map['a.a.a'] }
${ map["b+b+b"] }
1.5 EL 表达式的11 个隐含对象
对象名 对象的类型 对象的作用
pageContext PageContextImpl 获取jsp的九大内置对象
pageScope Map 可以获取pageContext域中的数据
requestScope Map 可以获取到request域中的数据
sessionScope Map 可以获取到Session域中的数据
applicationScope Map 可以获取到ServletContext域中的数据
param Map 可以获取到请求的参数值
paramValues Map 可以获取到请求的参数值(多个值
header Map 可以获取到请求头的值
headerValues Map 可以获取到请求头的值(多个值
initParam Map 可以获取context-param上下文参数的值
cookie Map 可以获取到Cookie的信息
1.6 EL 获取四个特定域中的属性
pageScope <======> pageContext 域
requestScope <======> request 域
sessionScope <======> Session域
applicationScope <======> ServletContext 域
你可以通过指定一个特定的域的EL隐含对象。输出指定域的数据。
1.7 pageContext对象的使用
<%
pageContext.setAttribute("req", request);
%>
<%=request.getSession().getId() %>
1.协议: ${ req.scheme }
2.服务器ip: ${ pageContext.request.serverName }
3.服务器端口: ${ pageContext.request.serverPort }
4.获取工程路径: ${ pageContext.request.contextPath }
5.获取请求方法: ${ pageContext.request.method }
6.获取客户端ip地址: ${ pageContext.request.remoteHost }
7.获取会话的id编号: ${ pageContext.request.session.id }
1.8 EL表达式其他隐含对象的使用
param和paramValues 获取请求参数值
获取请求参数username的值:${ param.username }
获取请求参数password的值:${ param.password }
${ param.hobby }
${ paramValues.hobby[0] }--${ paramValues.hobby[1] }
header和headerValues 获取请求头信息
${ header['User-Agent'] }
${ headerValues['User-Agent'][0] }
initParam
代码:${ initParam.username }
cookie 的演示 ${ cookie.JSESSIONID.value }
略过…… 后补