EL表达式
什么是EL表达式,EL表达式的作用?
EL表达式的全称是:Expression Language,是表达式语言。
EL表达式的作用:EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据输出。
因为EL表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多。
它们都能把值输出出来。
当我们输入空值的时候:
我们发现EL表达式的结果更好懂。
如果想要jsp表达式脚本达到同样的效果:
EL表达式的格式是:${表达式}
EL表达式在输出null值的时候,输出的是空串。jsp表达式脚本在输出null值的时候,输出的是null字符串。
EL表达式搜索域数据的顺序
EL表达式主要是在Jsp页面中输出数据。
主要是输出域对象中的数据。
当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出:
pageContext request session application
EL表达式输出Bean的普通属性,数组属性。List集合属性,map集合属性
1.要求一一输出Person类中普通属性。数组属性。List集合属性和map属性。
(1)建立实体类
在实体类中加上无参构造方法,有参构造方法,set,get方法,toString()方法。
jsp页面:
运行结果:
我们发现我们可以把对象的信息打印出来。
类对象属性的输出:
对于数组属性值直接p.phones打印出的是地址。
如果我们只想输出集合中的某一个元素:
注:
我们在实体类中添加一个属性:
在jsp页面中:
我们发现报错了,原因是什么呢?
当我们加上get方法后:
再次运行:
成功运行出结果。
如果我们去掉属性,只写get方法呢?
再次运行:
仍能正确输出。
于是通过这几次试验,我们得出结论:
在EL表达式中${p.属性名}找到的是对应属性的get方法。
EL表达式-------------------运算
语法:${运算表达式},EL表达式支持如下运算符:
empty运算
empty运算可以判断一个数据是否为空,如果为空,则输出true,不为空输出false.
一下几种情况为空:
1.值为null值的时候,为空
2.值为空串的时候,为空
3.值是Object类型数组,长度为零的时候
4.list集合,元素个数为零
5.map集合,元素个数为零
三元运算
表达式1?表达式2:表达式3
如果表达式1的值为真,返回表达式2的值,如果表达式1的值为假,返回表达式3的值
“.”点运算和[]中括号运算符
点运算,可以输出Bean对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值。
对于这样的含有特殊字符的Key
如果我们直接打印值:
我们发现并不能打印出值。
所以这时候我们就要用到[]中括号运算符了:
EL表达式的11个隐含对象
EL表达式中11个隐含对象,是EL表达式中自己定义的,可以直接使用。
变量 类型 作用
pageContext PageContextImol 它可以获取Jsp中的九大内置对象
pageScope Map<String,Object> 它可以获取pageContext域中的数据
requestScope Map<String,Object> 它可以获取Request域中的数据
sessionScope Map<String,Object> 它可以获取Session域中的数据
applicationScope Map<String,Object> 它可以获取ServletContext域中的数据
param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它可以获取请求参数的值,获取多个值的时候使用。
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的Cookie信息
intparam Map<String,String> 它可以获取在web.xml中配置的<context-param>上下文参数
EL获取四个特定域中的属性
pageScope ====== pageContext域
requestScope ==== Request域
sessionScope ==== Session域
applicationScope == ServletContext域
例:
不同的域对象的key都是key2
如果我们这时用之前的{key2}一定会获取的是范围最小的pageContext2。
所以我们要用到特定属性:
其它特定属性同理。
pageContext演示
但是我们会发现这时用EL表达式的代码要比jsp的表达式脚本还要长,这不符合简洁的要求。
所以在企业开发中,我们会这么写:
EL表达式其他隐含对象的使用
param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它可以获取请求参数的值,获取多个值的时候使用。
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的Cookie信息
intparam Map<String,String> 它可以获取在web.xml中配置的<context-param>上下文参数
param:
我们输出的是{}。为什么没有值呢?因为param是获取请求的参数,现在没有参数当然获取不到任何值啦。
当然我们也可以分别输出属性值:
paramValues:
对于数组也可以遍历,会用到下一个知识点jstl来遍历。
header:
这就是请求头信息。
headerValues:
cookie:
initParam:
先在web.xml中配置: