1. 为什么需要使用JSTL?
虽然EL表达式可以访问JavaBean的属性,但是并不能实现在JSP中进行逻辑判断,因而要使用JSTL标签
2. 什么是JSTL?
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL标签库的出现,不仅简化了JSP和WEB应用程序的开发,而且在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。而由JSTL1.0发展而来的EL语言更加简化了JSP页面中对变量和对象的访问操作。
3. JSTL的优点:
a. 提供一组标准标签
b. 可用于编写各种动态 JSP 页面
c. JSTL通常会与EL表达式合作实现JSP页面的编码
4. JSTL标准标签库内的标签:
JSTL标准标签库à核心标签库à{通用标签(set,remove,out),条件标签(if),迭代标签(foreach)}
5. 通用标签:set out remove
a.set:设置指定范围内的变量值
b.out:计算表达式并将结果输出显示
c.remove:删除指定范围内的变量
引入: <%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%>
设置变量或属性
<c:set var="num" value="${100+1 }"scope="session" />
<c:set var="num1" scope="session">${4+6}</c:set>
输出变量值:
<c:out value="${num }" />
<c:out value="${num1}"></c:out>
<br>移除变量值:
<c:remove var="num" />
<c:remove var="num1"/>
6. 条件标签的使用: if
a) if:if标签用于判断条件是否成,与Java中的If语句做用用相同
语法:
<c:if test="${num==100}"var="isnum" scope="page">
<h4>num的值是100</h4>
</c:if>
<c:if test="${num!=100}" var="isnum"scope="page">
<h4>num的值不是100</h4>
</c:if>
7. 使用条件标签if做登陆验证:
<%--
StringloginName = (String) session.getAttribute("NAME");
--%>
<!-- IP:-->
<!-- <inputtype="text" value="<%--=ip--%>" readonly="readonly"/>-->
<c:set var="loginName" value="${sessionScope.NAME}"></c:set>
<%--
if(loginName == null) {
--%>
<c:if test="${loginName==null}" var="islogin">
<form action="do_login.jsp" method="post" onsubmit="check()">
登录名:<input type="text" name="name"id="name">密码:<input
type="password" name="pwd"id="pwd"><input type="submit"
value="登陆">
</form>
</c:if>
<%--
}else if (loginName.equals("admin")) {
--%>
<c:if test="${loginName.equals('admin')}">
<div>
欢迎您:<c:out value="${loginName}" /><%--=loginName--%>!<ahref="admin.jsp">管理控制台</a><a
href="loginout.jsp">退出</a>
</div>
</c:if>
<%--
}else {
--%>
<c:if test="${islogin}">
<div>
欢迎您:<c:out value="${loginName}" /><%--=loginName--%>!<ahref="loginout.jsp">退出</a>
</div>
</c:if>
<%--
}
--%>
8. 迭代标签:foreach fortokens
迭代标签用于多次计算标签体
Fortokens标签的属性:
名称 | 类型 | 属性描述 |
items | String | 要处理的一系列以特定符号隔开的字符串 |
delims | String | 分隔字符集合 |
var | Sring | 记录当前处理项目的变量 |
varStatus | String | 记录循环状态的变量 |
begin | int | 循环的起始点 |
end | int | 循环的结束位置 |
step | int | 循环步长 |
9. 迭代标签的应用:
forEach是for循环语句的变体,实现集合对象(可以是list、数组等)的处理
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%! String [] numbers = { "1", "2", "3","4" }; %>
<c:set var="sp" value="ed,saf,wfas;sdafasf:2423/2fsaf"/>
<c:forEach var="n"items="${NUMS}" varStatus="s">
索引:<c:out value="${s.index}" />
<c:out value="${n}" />
遍历次数:<c:out value="${s.count }" />
<br> </c:forEach>
Fortokens是JSTL种的另一个迭代循环标签,它可以用来对字符串进行迭代循环,这个字符串是用符号分开的
<c:forTokens var="t"items="${sp}" delims=",;:/">
<c:out value="${t}" />
<br>
</c:forTokens>
10. 使用foreach改写新闻首页:
<ul class="classlist">
<%
List<News>news = nc.selectNews();
request.setAttribute("news", news);
%>
<c:forEach var="ns" items="${news}"varStatus="s">
<c:if test="${s.count%5==0}">
<li class='space'></li>
</c:if>
<li><a href="new_read.jsp?nid=${ns.nid}"><c:out
value="${ns.ntitle}" /></a><span><c:out
value="${ns.ncreatedate}" /></span>
</li>
</c:forEach>
</ul>