学习目标:
1、了解JSTL标签
2、了解EL表达式
学习过程:
这节课我们要学习两个内容:jstl和EL表达式。这两个内容一般都是一起配合使用了,所以我们就放在一起讲解了,这两个内容使用起来都是非常简单的。它可以简化我们在jsp中嵌入java代码。我们先看看在昨天我们做的用户列表的例子:
我们讲过mvc三层框架中,虽然在jsp中不会直接访问数据库访问层了,但是还是会在这里嵌入java代码,感觉不是很美观,今天我们将会使用jstl和EL表达式对其进行改写。
一、EL表达式
E L(Expression Language) 目的:为了使JSP写起来更加简单。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。EL使用起来非常简单,语法结构:
${expression}
1、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${ user. My-Name}应当改为${user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量。
2、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。如:
${username }
3、操作符
EL 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
- 算术型:+、-(二元)、*、/、div、%、mod、-(一元)
- 逻辑型:and、&&、or、||、!、not
- 关系型:==、eq、!=、ne、lt、gt、
- 条件型:A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
如:
${age+100 },${age>100 },${age mod 5 }
二、JSTL
JSTL(JavaServer Pages Standard Tag Library )是一个标准的已制定好的标签库,主要由Apache 组织的Jakarta Project 所实现。目前的最新版本是JSTL1.2。可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:
1)核心标签库 (Core tag library)
2)I18N 格式标签库 (I18N-capable formatting tag library)
3)SQL 标签库 (SQL tag library)
4)XML 标签库 (XML tag library)
5)函数标签库 (Functions tag library)
需要我们学习的其实就是核心标签库 (Core tag library)、I18N 格式标签库 (I18N-capable formatting tag library)和函数标签库 (Functions tag library),至于SQL 标签库 (SQL tag library)大家就不要学习了,尽管它提供了这样的功能,但是不符合MVC三层框架的思想。这里我们先重点学习核心标签库 (Core tag library)
1、示例,下面的示例演示了条件判断,循环等。
第一步:先导入标签:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
第二步:我们直接看代码吧,标签样式和html一样,由开始和结束,但是提供了条件判断和循环等功能。
<c:if test="${age==100 }">
age小于100
</c:if>
<c:choose>
<c:when test="${age==90 }">age等于90</c:when>
<c:when test="${age==80 }">age等于80</c:when>
<c:otherwise>其他值</c:otherwise>
</c:choose>
<c:forEach begin="1" end="100" step="1" var="bb">
${bb }
</c:forEach>
<!-- for(User user:users) -->
<c:forEach items="${users }" var="user">
${user.username }、
</c:forEach>
2、比如有字符串students=liu:bao:zhang,delims属性的作用是指定分隔符
示例:
<c:forTokens items="abc,123,hhhh" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
三、改写上面的用户列表的展示
1、要使用jstl标签,首先要导入这个标签,一般会在页面的最前面导入,prefix是前缀,可以是任意字符串,但是一般使用核心标签库,习惯上使用字符c。然后uri就写上导入的是那个标签库,这里当然就是jstl的核心库。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2、使用标签,代码如下:
<tbody>
<c:forEach items="${users }" var="user" varStatus="status">
<tr>
<th height="25">${status.index+1 }</th>
<th>${user.userId }</th>
<th>${user.username }</th>
<th>
<c:choose>
<c:when test="${user.sex==1 }">男</c:when>
<c:otherwise>女</c:otherwise>
</c:choose>
</th>
<th>删除 修改</th>
</tr>
</c:forEach>
</tbody>