EL表达式(用来代替jsp表达式)
简介:EL:Expression Language(表达式语言)
到JSP2.0以后,在JSP中不建议使用jsp脚本片段和jsp表达式。所以我们使用EL表达式来替换JSP表达式,使用标签(JSTL)来替换JSP脚本片段。EL表达式用来将一个对象输出到页面中
基本语法
语法:${表达式}
作用:
1.全域查找:
- 在EL表达式中传递一个属性名的时候,它会自动去四个域中(page、request、session、application)分别查找,从小到大查找,先找到谁先返回,如果都没找到则返回一个空串(什么也不返回)
- 用法:${属性名}
2.查找指定域中的属性
- 在EL表达式可以通过pageScope、requestScope、sessionScope、applicationScope来指定要查找属性的域。
- 用法:${xxxScope.属性名} 当属性名包含特殊内容,可以通过这种方式获取属性:${xxxScope['属性名']} 如: ${xxxScope['key-boy']}
3.JavaBean的查询
当通过EL表达式获取到的属性是一个JavaBean时,我们可以通过属性名直接获取对象中的属性值,它是通过调用相应属性的get方法来获取属性值,所以我们说通过EL表达式不能直接调用方法的但是它可以间接去调用get方法。
例子: ${对象.属性名.属性名}
El表达式只能获取域中的属性,如果我想直接获取javaBean中student是不能获取的,因为student不在域中,若想获取,则需将student设置在域中比如 :<% Student stu =new Student(); request.setASttribute("student","stu");%> EL表达式获取:${ requestScope.student};${ requestScope.student.name} (取对象中的名字,直接对象.属性名,后面的name是getName中去掉get后的name)
EL表达式中的隐含对象(11个)
1.pageContext : 类型:PageContext
- 作用:它和JSP中那个PageContext一样,通过它可以获取到JSP中的其他隐含对象在EL中并不能获取到JSP中的所有的隐含对象,只能获取pageContext,但是我们可以通过PageContext来获取其他的隐含对象,在EL中提供了四个Scope来代表我们四个域对象中的域,可以通过他们来获取域中的属性,这四个全都是map集合
2.pageScope : 类型:Map<String , Object>
作用:可以通过它来获取page域中的属性
3.requestScope : 类型:Map<String , Object>
作用:可以通过它来获取request域中的属性
4.sessionScope : 类型:Map<String , Object>
作用:可以通过它来获取session域中的属性
5.applicationScope : 类型:Map<String , Object>
作用:可以通过它来获取application域中的属性
6.param : 类型:Map<String , String>
作用:可以用来获取指定的请求参数
用法:${param.参数名}
7.paramValues : 类型:Map<String , String[]>
作用:代表一个参数对应的多个值
用法: ${paramValues.参数名[索引]}
(以下用的少)
8.header : 类型:Map<String , String>
作用: 代表请求头的信息
用法:${header.头名}
9.headerValues : 类型:Map<String , String[]>
作用:获取一个头对应的多个值
10.cookie : 类型:Map<String , Cookie>
作用:根据cookie的name来获取指定的cookie对象
11.initParam(基本不用) : 类型:Map<String,String>
作用:获取全局的初始化参数
EL表达式运算
JSTL表达式(用来代替jsp脚本片段)
学习JSTL的原因
从数据表中取得的数据,需要在页面上进行显示,按着目前的学习情况,可以使用 Java 脚本来显示内容。但 Java 代码和 HTML 标签嵌套 起来会比较乱.
用jsp脚本来写的代码如下:
使用 JSTL 之后,显示将变得特别的规整.
JSTL的使用
1.使用JSTL必须在项目中导入两个jar包
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.5.jar
2.在JSP页面中通过taglib标签引入标签库(C标签)。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix用来指定前缀名,我们通过该名来使用JSTL
uri相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库,可以通过 uri 属性定位到指定的标签库.(要用1.1以上的版本)。
3.使用JSTL
<c:out value="hello"></c:out>这个例子标识,调用前缀为c的标签的out方法,向页面中输出value属性中的字符串。JSTL的使用非常像html标签。