[1] 简介
Expression Language
在JSP的后期版本(2.0以后),在页面中是不允许使用脚本片段<%%> 以及JSP表达式<%=%>的
使用EL表达式来代替JSP表达式,而使用标签来代替脚本片段
EL表达式用于在页面中输出一个对象
EL可以直接将域中的对象在页面中输出
EL表达式的用途就是根据 域的属性名 获取属性值 。属性值为object类型,故而可以获取对象以及集合等。
${属性名}
[2] 基本语法
语法:${表达式}
EL可以用来做全域查找
使用方式 ${属性名}
会自动的按照由小到大的顺序从四个域中查找指定属性(page request session application)
哪个先找到则返回哪个,如果没找到不会出现null,而是返回一个空串
EL中给我们提供了4个对象域
pageScope
requestScope
sessionScope
applicationScope
我们可以通过这四个对象去查找指定域中的属性
- 使用方法
${xxxScope.属性名}
使用EL表达式时如果遇到含有特殊字符的属性名还可以使用如下方式获取属性值
${xxxScope[‘属性名’]}
特殊字符包括加减乘除等
${requestScope[‘Hello-Kitty’] }
JavaBean的查询
可以直接通过EL表达式获取域中的JavaBean的指定属性,例如request.setAttribute(“user”,user);
使用方法:
${对象.属性.属性}
原理:EL表达式会自动调用对象的get方法来获取指定的属性值。
> 查找指定域中属性
<!-- EL表达式只能读取域中的对象 -->
<!-- EL表达式中不能直接调用对象的方法 -->
<!-- 通过EL表达式来读取一个对象时,可以直接 对象.属性名 获取属性值 -->
<!-- 比如:对象.name , EL会自动调用该对象getName方法来获取属性 -->
<!-- 如果对象的属性还有子属性我们可以继续通过点运算符获取-->
${requestScope.stu.address.street }
[3] 隐含对象
EL中给我们提供了11个隐含对象,我们可以在EL表达式中直接使用这11个对象
这11个隐含对象,除了pageContext剩下的全都是Map类型
pageContext
类型:PageContext
作用:和JSP中pageContext一样,可以获取到JSP中其他隐含对象
获取request对象 : ${pageContext.request }
获取项目名 : ${pageContext.request.contextPath}
pageScope
类型:Map< String,Object>
作用:获取page域中指定的属性
requestScope
类型:Map< String,Object>
作用:获取request域中属性
sessionScope
类型:Map< String,Object>
作用:获取session域中属性
applicationScope
类型:Map< String,Object>
作用:获取application域中属性
param
类型:Map< String,String>
作用:可以获取到用户发送的请求参数,点运算符连接${param.属性名}
获取name参数 : ${param.name }
paramValues
类型:Map< String,String[]>
作用:可以获取到一个参数对应的多个值
获取hobby参数: ${paramValues.hobby[1] }
header
类型:Map< String,String>
作用:可以获取到用户发送的请求头信息
${header[‘User-Agent’] }
headerValues
类型:Map< String,String[]>
作用:可以获取到一个头对应的多个值,返回值是一个数组类型。
initParam
类型:Map< String,String>
作用:获取到整个WEB应用的初始化参数
cookie
类型:Map< String,Cookie>
作用:获取到浏览器的Cookie信息,map的key是Cookie的name,而value是Cookie值本身,所以获取cookie指定属性(phone)的属性值,${cookie.phone.value}
[4] 运算
在EL中可以直接使用常用的运行符进行运算+ - * /
empty运算符
可以用来判断一个域中对象是否为空
empty运算符检查一个null的对象时,会返回true
检查一个空串时,也会返回true
检查一个空的集合时,也会返回true
empty运算符我们常用集合是否为一个空集合,或者一个字符串是否为一个空串
使用方式:
${empty 属性名}
BeanUtils可以用来将属性封装到javaBean
我们可以使用BeanUtils来替我们封装属性
由于BeanUtils属于第三方的jar包,而且BeanUtils依赖logging包,所以使用BeanUtils时需要导入两个jar包
commons-beanutils-1.8.0.jar
commons-logging-1.1.1.jar
setProperty需要传递三个参数
作用:可以根据属性名向一个对象中设置一个属性值
Object bean 要为设置属性值的对象
String name 要设置的属性名
Object value 要设置的属性的值
Student stu = new Student();
BeanUtils.setProperty(stu, “name”, “猪八戒”);
BeanUtils.setProperty(stu, “address”, “高老庄”);
BeanUtils.setProperty(stu, “age”, “abc”);
Map< String, String> map = new HashMap< String, String>();
//向map中添加属性
map.put(“name”, “唐僧”);
map.put(“address”, “女儿国”);
map.put(“age”, “16”);
BeanUtils.populate(stu, map);