目的:为了使JSP写起来更简单,可以直接写在HTML页面上和JSP标签中。
①EL表达式会转换成Java代码在后台执行。
②EL表达式使得访问存储在JavaBean中的数据变得非常简单。
③EL既可用来创建算数表达式也可用来创建逻辑表达式
④在EL表达式中可以使用整型数、浮点数、字符串、true、false、null
EL中的基础操作符
EL表达式支持大部分Java所提供的算术和逻辑操作符:
操作符 | 描述 |
---|---|
. | 访问一个Bean属性或者一个映射条目 |
[] | 访问一个数组或者链表的元素 |
( ) | 组织一个子表达式以改变优先级 |
+ | 加 |
- | 减或负 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 |
JSP EL隐含对象
JSP EL支持下表列出的隐含对象:
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |
语法:
①在JSP EL中通用的操作符是“.”和“[ ]”。这两个操作符等允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。
②当JSP编辑器在属性中见到“${ }”格式后,它会产生代码来计算这个表达式,并且产生一个替代品来代替表达式的值。
③我们也可以在JSTL标签中使用EL表达式。
EL表达式应用
①${ user.name } 访问姓名
②request.setAttribute("age1","age");
访问age by EL(两种方式):
${ user[age1]} 把绑定名进去
${user["age"]} 把属性放进去
③${ user.course.counseName }
${ user.interest[1] }
变量
EL存取变量数据的方式很简单,例如:${username}。它的意思是取出某一范围内名称为username的变量。 如果我们没有指定哪一范围的username,所以它才会依次从page、request、session、application范围查找。 找到了就直接回传,不再继续查找,没找到则返回null。
通过EL获取请求参数
①${param.name},相当于request.getParameter(name);
例如:${user.name}
②${paramValues.interest[0]}相当于:request.getParameterValues(interest);
示例:JSP页面中
<% User u1 = new User(); u1.setName("fyj"); u1.setAge(18); u1.setInterest(new String[]{ "math","gym" }; request.setAttribute("user",u1); %>
① 用JSP标签获取获取属性
<% User u2 = (User) request.getAttribute("user"); out.println("姓名:"+u2.getName()+"性别:"+u2.getAge()); %>
② 用EL表达式获取
姓名:${ user.name }
性别:$ { user["age"] } 貌似属性放在中括号中就要加引号,如果是绑定名就不用加引号。
兴趣:${ user.intereset[0] }
设置访问范围:
用户姓名:${ requestScope.user.name }
JSP标准标签库(JSTL)
JSTL是一个JSP标签集合,它封装了JSP应用的通用核心功能。
Apache组织开发了一套标签库,被sun公司整合称之为标准标签库(JSP standard Tag Library)简称JSTL配合EL表达式,以达
到减轻JSP文件的复杂度,方便维护JSP文件的目的。
JSTL支持通用的、结构化的任务,根据JSTL标签所提供的功能,可以将其分为5个类别。
①核心标签
②格式化标签
③SQL标签
④XML标签
⑤JSTL标签
如何使用JSTL:
①将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下
②使用taglib指令导入JSP标签
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 导入核心标签
core核心标签
①if标签
语法:<c:if test="tt" var="dd" scope="request"></c:if>
当test为true时,执行标签内容,test属性可以使用EL表达式赋值。
var属性:指定一个绑定名称
scope属性:指定绑定的范围(page、request、session、application)。实际范围小于绑定范围查不到。
request.setAttribute("emp",emp); <c:if test="${emp.gender='M'}" var="rs" scope="request">男</c:if> <c:if test="${!rs}">女</c:if>
②choose标签
when表示一个处理分支当test属性为true时,会执行该分支,可以出现一次或多次,otherwise表示例外,可以不写且只能写一次。
<c:choose> <c:when test="${emp.name='D'}">D</c:when> <c:when test="${emp.name='C'}">C</c:when> <c:otherwise>T</c:otherwise> </c:choose>
③forEach标签
用于遍历集合或数组。
request.setAttribute("emps",emps); <c:forEach var="emp" items="${emps}" varStatus="s"> 姓名:${emp.name} 性别:${emp.gender} 计数:${s.count} 下标:${s.inndex} </c:forEach>
var:绑定名,容器每次从集合取出一个对象,这个对象绑定到pageContext上。
items:指定要遍历的集合。
此处还可选填:varStatus属性。
指定一个绑定名称,绑定值是由容器创建的对象,该对象封装了一个当前迭代的状态,循环获取下标。
例如:varStatus='s' s.index:获取下标 s.count:可以记录行。