一:什么是JSTL
从 JSP 1.1规范开始, JSP 就支持使用自定义标签,使用自定义标签大大降低了 JSP 页面的复杂度,同时增强了代码的重用性。为此,许多 Web 应月厂商都定制了自身应用的标签库,然而同一功能的标签由不同的 Web 应用厂商制定可能是不同的,这就导致市面上出现了很多功能相同的标签,令网页制作者无从选择。为了解决这个问题, Sun 公司制定了一套标准标签库( JavaServer Pages Standard Tag Library ),简称 JSTL 。
JSTL 虽然被称为标准标签库,而实际上这个标签库是由5个不同功能的标签库共同组成的
二:Core 是一个核心标签库,它包含了实现 Web 应用中通操作的标签。例如,用于输出文本内容的< c : out >标签、用于条件判断的< c : if>标签、用于迭代循环的< c : forEach >标签。
l18N是一个国际化/格式化标签库,它包含实现 Web 应用程序的国际化标签和格式化标签。例如,设置 JSP 页面的本地信息、设置 JSP 页面的时区、使日期按照本地格式显示等。
SQL 是一个数据库标签库,它包含了用于访问数据库和对数据库中的数据进行操作的标签。例如,从数据库中获得数据库连接、从数据库表中检索数据等。由于在软件分层开发模型中, JSP 页面仅作为表示层,一般不会在 JSP 贡面中直接操作数据库,因此, JSTL 中提供的这套标签库不经常使用。
XML 是一个操作 XIML 文档的标签库,它包含对 XML 文档中的数据进行操作的标签。例如。解析 XML 文件、输出 XML 文档中的内容,以及迭代处理 XML 文档中的元素。 XML 广泛应用于 Web 开发,使用 XML 标签库处理 XML 文档更加简单方便。
Functions 是一个函数标签库,它提供了一套口定义 EL 函数,包含了 JSP 网页制作者经常要用到的字符串操作。例如,提取字符串中的子字得串、获取字符串的长度等。
三:导入JSTL包
四:测试JSTL
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl</title>
</head>
<body>
<c:out value="大数据"></c:out>
<br/>==============================<br/>
<c:out value="${param.username }" default="dashuju" escapeXml="false"></c:out>
<br/>==============================<br/>
<c:out value="${param.username }" escapeXml="true">大数据</c:out>
</body>
</html>
结果
五:<c:out>标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
username的属性值1:<c:out value="${param.username }" default="uknown"></c:out>
<br/>==============================<br/>
username的属性值2:<c:out value="${param.username }">you known</c:out>
</body>
</html>
结果
使用<c:out>标签的escapeXml属性对特殊字符进行转义
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out2</title>
</head>
<body>
<!-- 默认的“true” escapeXml是输出c:out里面所有的内容,false则是将其中的html、xml解析出来-->
<c:out value="${param.username }" escapeXml="true">
<a href="login.html">点击这里,进行跳转登录页面</a>
</c:out>
==================================<br/>
<c:out value="${param.username }" escapeXml="false">
<a href="login.html">点击这里,进行跳转登录页面</a>
</c:out>
</body>
</html>
结果
六:<c:if>标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--request.setAttribute("key",1); --%>
<c:set var="key" value="2" scope="request" property="key1"></c:set>
${requestScope.key }<br/>
<c:if test="true">1</c:if><br/>
<c:if test="false">2</c:if><br/>
<c:if test="true">3</c:if><br/>
</body>
</html>
七:<c:choose>标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>c:choose 标签实例</title>
</head>
<body>
<c:set var="salary" scope="session" value="${100*2}"/>
<p>你是 : <c:out value="${salary}"/></p>
<c:choose>
<c:when test="${salary <= 0}">
什么
</c:when>
<c:when test="${salary > 1000}">
???
</c:when>
<c:otherwise>
!!!!
</c:otherwise>
</c:choose>
</body>
</html>
八:<c:forEach>标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body style="text-align: center;">
<%
List userList=new ArrayList();
userList.add("Tom");
userList.add("Make");
userList.add("Lina");
request.setAttribute("users", userList);
%>
<table border="1">
<tr>
<td>序号</td>
<td>索引</td>
<td>是否为第一个元素</td>
<td>元素的值</td>
</tr>
<!-- varStatu属性 -->
<c:forEach var="bb" items="${users }" varStatus="vv">
<tr>
<td>${vv.count }</td>
<td>${vv.index }</td>
<td>${vv.first }</td>
<td>${vv.last }</td>
<td>${bb }</td>
</c:forEach>
</table>
</body>
</html>
九:<c:param>标签与<c:url>标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://WWW.W3.ORG/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
使用绝对路径:<br/>
<c:url var="absouLateURL" value="http://localhost:10081/chapter8/login.html">
<c:param name="username" value="莫"></c:param>
<c:param name="country" value="中国"></c:param>
</c:url>
<a href="${absoulateURL }">绝对路径登陆页面</a>
<hr/>
使用相对路径:<br/>
<c:url var="risistURL" value="login.html?username=莫&country=中国"></c:url>
<a href="${risistURL }">相对路径登陆页面</a>
</body>
</html>