EL表达式
概念
EL 就是Expression Language(表达式语言)
功能
替代JSP页面中的复杂代码
特点
- 自动转换类型
- 使用简单
语法
以 “ $ {”作为开始,以“}”作为结束直接使用变量名获取值。
变量属性范围名称
属性范围 | EL中的名称 |
---|---|
page | pageScope |
request | requstScope |
session | sessionScope |
application | applicationScope |
运算符
- “[ ]” 获取对象属性
栗子:${user.name} ——> ${user[name]} - “ . ” 获取对象集合中的数据
栗子:在Session中保存了一个(list)集合users(${sessionScope.user[1]} 获取集合中第二个值)在这里插入代码片
案例(输出姓名显示)
<body>
<%
//request作用域
request.setAttribute("request", "request苏衍珩");
//session作用域
session.setAttribute("session", "session苏衍珩");
//application作用域
application.setAttribute("application", "application苏衍珩");
//page作用域
pageContext.setAttribute("page", "page苏衍珩");
%>
<!-- 通过EL表达式获取作用域里面的值 -->
${request}<br/>
${session}<br/>
${application}<br/>
${page}
</body>
效果图:
四大作用域
EL表达式是从四大作用域里面获取数据。在获取数据的时候,如果没有指定作用域,那直接根据作用域的优先级从高到低依次查找。
优先级
四大作用域的优先级:
在当前页面(页面没有发生跳转)
page>request>session>application
在当前页面(页面发生跳转)
request>session>application
隐式对象
- 作用域访问对象(pageScope、requestScope、sessionScope、applicationScope)
- 参数访问对象(param、paramValues)
- JSP隐式对象(pageContext)
介绍
对象名称 | 说明 |
---|---|
pageScope | 返回 页面范围 的变量名,这些名称已映射至相应的值 |
requestScope | 返回请求范围的变量名,这些名称已映射至相应的值 |
sessionScope | 返回会话范围 返回的变量名,这些名称已映射至相应的值 |
applicationScope | 返回应用范围内的变量,并将变量名映射至相应的值 |
param | 返回客户端的请求参数的字符串值 |
paramValues | 返回 映射至客户端的请求参数的一组值 |
pageContext | 提供对用户请求和页面信息的访问 |
JSTL标签
概念
JSTL(JavaServerPages Standard Tag Library),JSP标准标签库。
优点
提供一组标准标签、可用于编写各种动态 JSP 页面(ps:JSTL通常会与EL表达式合作实现JSP页面的编码)
核心标签库
通用标签
- set:设置指定范围内的变量值
- remove:计算表达式并将结果输出显示
- out:删除指定范围内的变量
案例
插入使用核心标签的指令 :
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body>
set 标签用于给变量设置值和作用范围 scope= "page|request|session|application"
<c:set var= "example" value="${100+1}" scope="session" />
out 标签在页面上显示信息或变量值
<c:out value="${example}"/>
<c:remove var= "example" scope="session"/>
</body>
条件标签
if(if标签用于判断条件是否成立,与Java中的If语句作用相同)
语法
<c:if test="codition" var="name" scope="application" >
<!-- test 判断条件表达式、返回true/false ;var变量名用于保存、返回的true/false ;scope指定var变量的作用域 -->
迭代标签
forEach(实现对集合中对象的遍历)
语法
<c:forEach items=collection var=name begin=start end=end step=count>
…循环体代码…
</forEach>
<!--ps:items指定要遍历的集合对象、var指定集合内数据的变量名称、begin指定从集合的第几位开始、end指定迭代到集合的第几位结束、Step指定迭代的增量。forEach是for循环语句的变体,实现集合对象(可以是list、数组等)的处理 -->
案例
<!-- 循环输出商品信息 -->
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶数行,为该行换背景颜色 -->
<tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>
<td>${product.name }</td>
<td>${product.area }</td>
<td>${product.price }</td>
</tr>
</c:forEach>
效果图: