EL(Expression Language)是jsp2.0的一个主要组件,在jsp页面中提供了简化访问数据和静态方法的机制。EL表达式的语法格式为${expression},在使用EL表达式时不需要引入JSTL标签,除非使用迭代标签.
1、存取数据
EL提供”.”和”[]”两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.、?或全部是数字时,就一定要使用”[]”来存取数据,例如${user.myname}必须要改为${user[“myname”]}。
如果要动态取值时,就可以使用”[]”,而”.”无法做到动态取值。例如
{sessionScope.user[data]} 中data是一个变量。
2、变量
EL表达式中主要的隐式对象:
l pageScope
l requestScope
l sessionScope
l applicationScope
EL表达式默认查找变量的顺序是按照以上顺序从隐式对象中取值,为了提高效率,我们可以直接指定搜索域.如
2.1、获取属性
后台 request.setAttribute("a","hello");
前台 ${requestScope.a}
此外EL表达式可以级联获取对象属性的值
后台: request.setAttribute("user",user);
前台: ${user} 取得user对象
${user.userName} 取得user对象的userName属性的值
${user.group.name} 取得user对象所属组的组名
2.2、访问数组元素
后台:String[] str= newString[]{"a","b",”c“};
request.setAttribute("str",str);
前台: ${str[1]} //通过下标来访问数组元素,下标从0开始
注意:使用EL表达式,只能获得数组、集合或Map中的某一元素,若要遍历集合中的元素,则需结合JSTL。
2.3、访问集合元素
后台: ArrayList list = new ArrayList();
while(i < 10)
{
User user = new User();
user.setId(i);
user.setUserName("user"+i);
list.add(user);
}
request.setAttribute("user",list);
前台:
${user[3].userName} //通过下标来访问数组元素,下标从0开始
2.4、访问Map元素
后台:Map map = new HashMap();
map.put("user","user");
request.setAttribute("map",map);
前台: ${map.user.name}
2.5、运算符
运算符类别 | 运算符 |
算术运算符 | + - * (/ div) (% mod) |
关系运算符 | (== eq) (!= ne) (< lt) (<= le) (>= ge) |
逻辑运算符 | &&(或and) or(或or) ! (或not) |
判空运算符 | empty,如${empty name} |
举例:
${100%66}
${3<5}
${ssl==’ssl’}
2.6、表达式判空
后台:request.setAttribute("value2","");
request.setAttribute("value3",newArrayList());
request.setAttribute("value4","123456");
request.setAttribute("value5",null);
前台:
${empty value1}
${empty value2}
${empty value3}
${empty value4}
${empty value5}
结果
True
True
true
false
true
2.7、总结
EL存取变量数据的方法很简单,例如${username},意思是取出某一域内名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传””,即空的字符串,而不是NULL。
EL隐含对象
类别 | 隐含对象 | 描述 |
jsp页面 | pageContext | 代表此jsp页面的pageContext对象 |
作用范围 | pageScope | 用于读取page范围内的属性 |
requestScope | 用于读取request范围内的属性 | |
sessionScope | 用于读取session范围内的属性 | |
applicationnScope | 用于读取application范围内的属性 | |
请求参数 | param | 用于读取请求参数中的参数值,${param[“name”]} 等同于request.getParameter(“name”) |
paramValues | 用于获取请求参数中的参数值数组 | |
请求头 | header | 用于获取指定的请求头 如${header.host} |
headerValues | 用于获取指定请求头的值数组, 等同于request.getHeaders(String name) | |
Cookie | cookie | 用于获取请求中的cookie集 |
初始化参数 | initParam | 用于获取web应用程序上下文中的初始化参数,等同于 application.getInitParameter(String name) |
注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。