EL是一种简单的语言,可以方便地访问和处理应用程序数据,而无需使用JSP脚本元素或JSP表达式。
其最大的优势是方便地访问JSP的隐含对象和javabean组件,使JSP页面从HTML代码中嵌入java代码的混乱结构得以改善,提高了程序的可读性和易维护性。
特点:
可以访问JSP的内置对象
简化了对javabean、集合的访问方式
可以对数据进行自动类型转换
可以通过各种运算符进行运算
可以使用自定义函数实现跟家复杂的业务功能
EL在容器中默认配置处于启动状态,每个JSP页面也可以通过page指令进行配置
<%@page isELIgnored = "true|false"%>
如果设置成true的话,则EL表达式会被当字符串直接输出。
EL中的常量:
布尔常量,用于区分事物的正反面,用true,false表示
整型常量,与java中定义的相同
浮点数常量,与java中定义的相同
字符串常量,是用单引号或双引号引起来的一串字符
NULl常量,用于表示应用的对象为空,用null但是在EL表达式中并不会输出null而是输出空。
EL中的变量:
EL表达式中的变量不同于jsp表达式从当前页面中定义的变量进行查找,而是由EL引擎调用PageContext.findAttribute(String)方法来从JSP四大作用域的范围中查找。例如:${username},表达式将按照page、request、session、application范围的顺序依次查找名username的属性,假如中途找到,就直接回传,不再继续找下去。假如全部的范围都没有找到,就回传null,因此在使用EL表达式访问某个变量时,应该指定查找的范围,从而避免不同作用范围中有同名属性的问题,也提高了查询效率。
EL中的.和[]操作符:
.操作符,与在java代码中一样,EL表达式也可使用点操作符来访问对象的某个属性。例如,访问javabean对象中的属性,${person.name}
[]操作符,与点操作符类似,也可以用来访问对象的属性,属性需要双括号括起来。例如,${person["name"]}
其也有其他强大的功能,
当属性中包含了特殊字符,如".","-"等非字母或数字的符号,就得使用[]
其可以访问有序集合或者数组中指定索引位置的某个元素,如${arr[0]}
其可以访问Map对象的key关键字,如${map["key"]}
其可以和.操作符结合使用,如${users[0].username}
EL的错误机制:
EL对于错误的处理方式是不提供警告,只提供默认值和错误,默认值是空字符串,错误是抛出一个异常,如
当在EL中访问一个不存在的变量,则输出空字符串,而不是null,
在EL中访问一个不存在对象的属性,会输出空字符串,而不是抛出空指针异常
在EL中访问一个不存在对象的不存在属性,则会抛出异常
EL的隐含对象:
1.与范围有关
隐含对象 | 说明 |
pageScope | 用于获得页面请求作用范围中的属性值,相当于pageContext.getAttribute() |
requestScope | 类比上 |
sessionScope | 类比上 |
applicationScope | 类比上 |
使用的方式:
<jsp:useBean id="person1" class="com.javabean.Person" scope="session"/>
<jsp:setProperty property="name" name="person1" value="zhangsan"/>
<jsp:setProperty property="age" name="person1" value="20"/>
${sessionScope.person1.name}
${sessionScope.person1.age}
2.与请求参数有关
隐含对象 | 说明 |
param | 用于获取请求参数的单个值,相当于request.getParameter() |
paramValues | 用于获取请求参数的一组值,相当于request.getParameterValues() |
使用方式:
请求参数1:${param.a}<br/>
3.其他隐含对象
隐含对象 | 说明 |
pageContext | 相当于jsp页面中的pageContext对象 |
header | 用于获取请求头中的一个值,相当于request.getHeader(String name) |
headerValues | 用于获取请求头中的一组值 |
cookie | 用于获取指定的cookie |
initParam | 获得上下文初始参数,相当于application.getInitParameter(String name) |
这里只列出有特殊名称的运算符
/或div 除以
%或mod 取余
==或eq 等于
!=或ne 不等于
<或lt 小于
>或gt 大于
<=或le 小于等于
>=或ge 大于等于
&&或and 与
||或or 或
!或not 非
empty 判空
empty在以下情况会返回true
当操作数指向的对象为null
当操作数是空字符串
当操作数是集合或者数组时,若操作数中没有任何元素
当操作数是java.util.Map中的关键字,Map对象为空,Map对象没有指定关键字,Map对象的关键字对应的值为空
EL自定义函数:
EL自定义函数就是提供一种语法在EL中调用某个java类的静态方法。
格式如下:
&{hh:fun(a1,a1,..an)}
其中,hh必须匹配包含了函数的标签库的前缀
fun为函数名,a1、a2为函数的参数
要自定义函数需要以下三个步骤:
1,编写EL自定义函数映射的java类和类中的静态方法
2,编写标签库描述文件(TLD文件),在TLD文件中描述自定义函数
3,在JSP页面中导入和使用自定义函数