目录
5、choose:实现Java语言中if-else if-else语句的功能
1、为什么需要EL
1、JavaBean在JSP中的局限
- 在JSP页面中嵌入大量的Java代码
- 获取JavaBean属性必须要实例化
- 强制类型转化
<%
Employee employee = (Employee)request.getAttribute("employee");
Computer comp = employee.getComputer();
String manufacturer = comp.getManufacturer();
%>
2、解决办法
使用EL表达式简化
${requestScope.employee.computer.manufacturer}
2、EL表达式简介
1、什么是EL
- Expression Language(表达式语言)
2、EL的功能
- 替代JSP页面中的复杂代码
3、EL的特点
- 自动转换类型
- EL得到某个数据时可以自动转换类型
- 使用简单
4、EL表达式语法
${ EL exprission }
- 使用变量名获取值
- 获取对象的属性值
- 获取集合
1、使用变量名获取值
- ${变量名}
<% request.setAttribute("username","LiYang"); %>
姓名: ${username}
2、变量属性范围名称
属性范围 |
EL中的名称 |
说明 |
page |
pageScope |
${pageScope.username},表示在page范围内查找username变量,找不到返回Null |
request |
requstScope |
|
session |
sessionScope |
|
application |
applicationScope |
${requstScope.username}
3、获取对象的属性值
<%
User user = (User )request.getAttribute("user");
user.getName();
%>
- 点操作符
${user.name}
- [ ]操作符
${user["name"]}
使用EL表达式输出姓名
<%
Map names = new HashMap();
names.put("one","LiYang");
names.put("two","WangHua");
request.setAttribute("names",names);
%>
姓名:${names.one}<br/>
姓名:${names["two"] }<br/>
- 关系操作符
关系操作符
说明
示例
结果
==(或eq)
等于
${23==5}或${23 eq 5}
${"a" =="a"}或${"a" eq "a"}
false
true
!=(或ne)
不等于
${23!=5}或${23 ne 5}
true
<(或lt)
小于
${23<5}或${23 lt 5}
false
>(或gt)
大于
${23>5}或${23 gt 5}
true
<=(或le)
小于等于
${23<=5}或${23 le 5}
false
>=(或ge)
大于等于
${23>=5}或${23 ge 5}
ture
- 逻辑操作符
逻辑操作符
说明
示例
结果
&&(或and)
逻辑与
如果A为true,B为false,则A&&B(或A and B)
false
||(或or)
逻辑或
如果A为true,B为false,则A||B(或A or B)
true
! (或not)
逻辑非
如果A为true,则!A (或not A)
false
- Empty操作符
变量 a不存在,则${empty a}返回的结果为true
${not empty a}或${!empty a}返回的结果为false
3、EL隐式对象
作用域访问对象:pageScope、requestScope、sessionScope、applicationScope
参数访问对象:param、paramValues
JSP隐式对象:pageContext
对象名称 |
说 明 |
pageScope |
返回页面范围的变量名,这些名称已映射至相应的值 |
requestScope |
返回请求范围的变量名,这些名称已映射至相应的值 |
sessionScope |
返回会话范围的变量名,这些名称已映射至相应的值 |
applicationScope |
返回应用范围内的变量,并将变量名映射至相应的值 |
param |
返回客户端的请求参数的字符串值 |
paramValues |
返回映射至客户端的请求参数的一组值 |
pageContext |
提供对用户请求和页面信息的访问 |
4、为什么使用JSTL
虽然EL表达式可以访问JavaBean的属性,但是并不能实现在JSP中进行逻辑判断,因而要使用JSTL标签。
5、什么是JSTL
什么是JSTL JSP标准标签库(JavaServerPages Standard Tag Library)
JSTL通常会与EL表达式合作实现JSP页面的编码
6、JSTL 的优点
- 提供一组标准标签
- 可用于编写各种动态 JSP 页面
7、JSTL的环境搭建
使用JSTL的步骤
- 在工程中引用JSTL的两个jar包和标签库描述符文件
- 在JSP页面添加taglib指令
-
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
使用JSTL标签
8、 JSTL标准标签库内的标签
核心标签库
通用标签:set、out、remove
条件标签:if、choose
迭代标签:forEach
1、set:设置指定范围内的变量值
将value值存储到范围为scope的变量variable中
<c:set var="variable" value=" v " scope=" scope "/>
将value值设置到对象的属性中
<c:set value="value" target="target" property="property" />
<%
User user = new User();
request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
2、out:计算表达式并将结果输出显示
不指定默认值
<c:out value="value" />
指定默认值
<c:out value="value" default="default" />
<%
User user = new User();
request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
<c:out value="${user.name}" default="noUserName" />
转义特殊字符
<p>${"<a href='http://www.baidu.com'>百度</a>"}</p>
<p>
<c:out escapeXml="Y" value="<a href='http://www.baidu.com'>百度</a>"/>
</p>
<c:out value="<a href='http://www.baidu.com'>百度</a>"/>
3、remove:删除指定范围内的变量
<body>
<!-- 设置之前应该是空值 -->
设置变量之前的值是:msg=<c:out value="${msg}" default="null"/>
<!-- 给变量msg设值 使用set属性进行赋值 -->
<c:set var="msg" value="Hello ACCP!" scope="page"></c:set>
<!-- 此时msg的值应该是上面设置的"已经不是空值了" 使用out属性输出显示-->
设置新值以后:msg=<c:out value="${msg}"></c:out><br>
<!-- 把 msg变量从page范围内移除 使用remove属性移除-->
<c:remove var="msg" scope="page"/>
<!-- 此时msg的值应该显示null -->
移除变量msg以后:msg=<c:out value="${msg}“ default="null">
</c:out>
</body>
通用标签的使用:
引入使用核心标签的指令
<%@ 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}"/>
remove 标签用于删除作用域内的变量
<c:remove var= "example" scope="session"/>
</body>
4、if:实现Java语言中if语句的功能
<c:if test="codition" var="name" scope="applicationArea" >
…
</c:if>
判断登录:
<body>
<c:set var="isLogin" value="${empty sessionScope.user}"/>
<c:if test="${isLogin}">
…登录表单
</c:if>
<c:if test="${! isLogin}">
已经登录!
</c:if>
</body>
5、choose:实现Java语言中if-else if-else语句的功能
<c:choose var="varName" scope="scope">
<c:when test="condition1">
主体内容
</c:when>
<c:when test="condition2">
主体内容
</c:when>
<c:otherwise>
主体内容
</c:otherwise>
</c:choose >
6、 forEach:实现对集合中对象的遍历
通过迭代标签显示商品列表:
<%
List products = GoodsDao.getAllProducts();
request.setAttribute("products", products);
%>
…
<!-- 循环输出商品信息 -->
<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>
通过迭代标签遍历Map:
<%
Map<String,String> map=new HashMap<String,String>();
map.put("tom", "美国");
map.put("lily", "英国");
map.put("jack","中国");
request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${map}">
${entry.key}
${entry.value}<p>
</c:forEach>
forEach:指定迭代的次数
<c:forEach begin="start" end="end" step="count">
…循环体代码…
</c:forEach>
<c:forEach begin="1" end="5" step= "2">
<c:out value="*"></c:out>
</c:forEach>