EL, Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式。EL表达式是从JSP2.0版本开始才引入的概念。
EL表达式的基本语法形式很简单:在JSP页面的任何静态部分均可通过${expression}的形式获取到指定表达式的值。
1.获取数据。
1.1从四大域中依次查找数据
EL只能从pageConext、request、session、 application 四大域属性空间中获取数据。其查找数据的顺序是,依次按照由小到大的范围从四大域中查找指定名称的属性值。
如:${属性名}
1.2 从指定域中获取数据
从pageContext依次查找到application 域空间,会降低执行效率。若某属性确定存放在某个域属性空间,则可指定直接从该空间中查找。此时需要借助EL的四个域属性空间相关的内置对象。
pageScope | 从page范围域属性空间中查找指定的key |
requestScope | 从request范围域属性空间中查找指定的key |
sessionScope | 从session范围域属性空间中查找指定的key |
applicationScope | 从application范围域属性空间中查找指定的key |
如:${pageScope.属性名}
1.3 访问bean中的属性
两种方式:
1)${属性名.属性}
2)${属性名['属性']}
注意:访问对象为null的属性时,EL表达式不会报空指针异常的错误
1.4访问数组
只能以下标的方式访问:${属性名[下标]}
需要注意的是,若数组中不存在该指定索引的元素,系统并不会抛出数组越界异常。
1.5访问List
与获取数组中的元素相同,通过${属性名[索引} 的方式可以获取List 中指定索引的元素。
若List中不存在该指定索引的元素,系统并不会抛出越界异常。
注意:el表达式不能访问set,因为set中没有索引的概念
1.6访问Map
${属性名.key}
2.EL表达式的运算符
EL表达式可以进行各种运算,其中常用的运算符有:
除了上述运算符外,还有一个非常有用的运算符empty,其用法为${empty 变量},结果为布尔值。
若变量未定义,则返回值为true
若变量为String 类型,且其值为空串,则返回值为true
若变量为引用类型,且其值为null,则返回值为true。
若变量为集合和数组类型,且其不包含任何元素,则返回值为true.
3.EL 内置对象
就像JSP的Java代码块及表达式块中可以使用九个内置对象一样,EL 表达式中,同样也存在有内置对象,并且存在11个内置对象。常用的内置对象,除了前面使用过的四个域
属性空间相关的内置对象外,还有如下几个。
(1) pageContext
该pageContext与JSP内置对象中的pageContext是同一个对象。通过该对象,可以获取到request、response、 session、 servletContext、 servletConfig 等对象。注意,这些对象在EL中不是内置对象。这些对象只能通过pageContext 获取。在EL中直接${pageContext.request}即可获取request对象。当然,其底层实际调用的是
pageContext.getRequest()方法。同理,也可以通过类似方式获取到其它对象。在这些获取的对象中,有一个是实际工程中最常用的:
${pageContext.request.contextPath},用于获取当前项目的发布到服务器的名称。一般会用在JSP页面的路径前。
<form action="${pageContext . request. contextPath }/register. do" method="POST">
<!--......-->
</form>
注意:在EL的11个内置对象中,除了pageContext外,其它10个内置对象,其类型均为java.util.Map类型。
(2)param
(3)paramValues
(4)initParam
总结:
EL不能出现在Java代码块、表达式块等JSP 的动态代码部分。
EL只能从pageConext、reqyest、 session、 application 四大域属性空间中获取数据。
EL不会抛出空指针异常。若访问一个null对象的属性,则什么也不显示。
EL不会抛出数组访问越界异常。若访问一个数组中的不存在的元素,则什么也不显示。
EL不具有对字符串进行处理的能力,就连简单的字符串拼接都不行。