共计 2278 个字符,预计需要花费 6 分钟才能阅读完成。
1、EL 概述
1.1、EL 的作用
JSP2.0 要把 html 和 css 分离、要把 html 和 javascript 分离、要把 Java 脚本替换成标签。标签的好处是非 Java 人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含 <% … %>、<%! … %>,以及 <%= … %>
EL(Expression Language)是一门表达式语言,它对应 <%=…%>。我们知道在 JSP 中,表达式会被输出,所以 EL 表达式也会被输出。
1.2、EL 的格式
格式:${…}
例如:${1 + 2}
1.3、关闭 EL
如果希望整个 JSP 忽略 EL 表达式,需要在 page 指令中指定 isELIgnored=”true”。
如果希望忽略某个 EL 表达式,可以在 EL 表达式之前添加“\”,例如:${1 + 2}。
1.4、EL 运算符
1.5、EL 不显示 null
当 EL 表达式的值为 null 时,会在页面上显示空白,即什么都不显示。
2、EL 表达式格式
先来了解一下 EL 表达式的格式!现在还不能演示它,因为需要学习了 EL11 个内置对象后才方便显示它。
l 操作 List 和数组:{list[0]}、{arr[0]};
l 操作 bean 的属性:{person.name}、{person[‘name’]},对应 person.getName()方法;
l 操作 Map 的值:{map.key}、{map[‘key’]},对应 map.get(key)。
3、EL 内置对象
EL 一共 11 个内置对象,无需创建即可以使用。这 11 个内置对象中有 10 个是 Map 类型的,最后一个是 pageContext 对象。
l pageScope
l requestScope
l sessionScope
l applicationScope
l param;
l paramValues;
l header;
l headerValues;
l initParam;
l cookie;
l pageContext;
3.1、域相关内置对象(重点)
域内置对象一共有四个:
l pageScope:${pageScope.name}等同与 pageContext.getAttribute(“name”);
l requestScope:${requestScope.name}等同与 request.getAttribute(“name”);
l sessionScoep:${sessionScope.name}等同与 session.getAttribute(“name”);
l applicationScope:${applicationScope.name}等同与 application.getAttribute(“name”);
如果在域中保存的是 JavaBean 对象,那么可以使用 EL 来访问 JavaBean 属性。因为 EL 只做读取操作,所以 JavaBean 一定要提供 get 方法,而 set 方法没有要求。
Person.java
public class Person {private String name;
private int age;
private String sex;
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
public int getAge() {return age;
}
public void setAge(int age) {this.age = age;
}
public String getSex() {return sex;
}
public void setSex(String sex) {this.sex = sex;
}
}
全域查找:${person}表示依次在 pageScope、requesScopet、sessionScope、appliationScope 四个域中查找名字为 person 的属性。
3.2、请求参数相关内置对象
param 和 paramValues 这两个内置对象是用来获取请求参数的。
param:Map<String,String> 类型,param 对象可以用来获取参数,与 request.getParameter()方法相同。
注意,在使用 EL 获取参数时,如果参数不存在,返回的是空字符串,而不是 null。这一点与使用 request.getParameter()方法是不同的。
paramValues:paramValues 是 Map<String, String[]> 类型,当一个参数名,对应多个参数值时可以使用它。
3.3、请求头相关内置对象
header 和 headerValues 是与请求头相关的内置对象:
header:Map<String,String> 类型,用来获取请求头。
headerValues:headerValues 是 Map<String,String[]> 类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。
3.4、应用初始化参数相关内置对象
initParam:initParam 是 Map<String,String> 类型。它对应 web.xml 文件中的
3.5、Cookie 相关内置对象
cookie:cookie 是 Map<String,Cookie> 类型,其中 key 是 Cookie 的名字,而值是 Cookie 对象本身。
3.6、pageContext 对象
pageContext:pageContext 是 PageContext 类型!可以使用 pageContext 对象调用 getXXX()方法,例如 pageContext.getRequest(),可以 ${pageContext.request}。也就是读取 JavaBean 属性!!!