一.理论准备
JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记,主要是为了方便页面的编写。
JSTL包括,core(c),format(fmt),sql(sql),xml(xml),functions(fn)。
使用包括两个 JAR 文件, jstl.jar 和 standard.jar 。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
二.Core 标签库
Core 标签库主要包括了一般用途的标签,如条件标签、迭代标签和 URL 相关的标签。
一般用途的标签有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>
1.<c:out>
用于计算一个表达式并将结果输出。类似于 JSP 中 <%=%> 表达式,或者是 EL 中 ${el-expression} 。
//escapeXml默认true,对><空格等转换为对应的html
<c:out value="欢迎访问" /><br>
<c:out value="${session.username}" default="anonymous" /><br>
<c:out value="${username}" default="anonymous" /><br>
//下面这个必须指定为false,因为有<>
<c:out value="<h1>欢迎访问</h1>" escapeXml="false" />
<c:out value="<h1>欢迎访问</h1>" /><br>
2.<c:set>用于设置范围变量的值或者 javabean 对象的属性。
<c:set var="username" value="SunWukong" scope="session" />
<c:set var="username" scope="session">
SunWukong
</c:set>
3.<c:remove>
相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>
//不带范围的话在四个范围中一次查找
<c:remove var="username" scope="session"/>
4.<c:catch>
用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。
<c:catch var="ex">
<%
String number = "none";
int i = Integer.parseInt(number);
%>
</c:catch>
${ex}
条件标签包括 <c:if><c:choose><c:when><c:otherwise>
1.<c:if>
用于实现 java 中的 if 语句功能。
<c:if test="${session.username=='system'}">
欢迎系统管理员!
</c:if>
2.<c:choose>
<c:choose> 和 <c:when> 、 <c:otherwise> 类似switch、case、default。
<c:choose>
<c:when test="${param.age>70}">
欢迎老人
</c:when>
<c:when test="${param.age<=70 and param.age>=35}">
欢迎中年人
</c:when>
<c:when test="${param.age<=35 and param.age>=0}">
欢迎年轻人
</c:when>
<c:otherwise>
可能你还没有出生呢
</c:otherwise>
</c:choose>
迭代标签 迭代标签有 <c:forEach> 和 </c:forEach>
<%
String names[] = new String[4];
names[0] = "孙悟空";
names[1] = "猪八戒";
names[2] = "沙僧";
names[3] = "唐僧";
pageContext.setAttribute("names", names);
%>
<c:forEach items="${names}" var="name">
${name}<br>
</c:forEach>
<c:forEach items="${names}" var="name" begin="0" end="3" step="1">
${name}<br>
</c:forEach>
<c:forEach items="${names}" var="name" varStatus="i">
${name}<br>
index: ${i.index}<br>
count: ${i.count}<br>
first: ${i.first}<br>
last: ${i.last}<br>
</c:forEach>
其他
//生成带参数的url:http://www.v512.com?param=value
<c:url var="website" value="http://www.v512.com" >
<c:param name="param" value="value" />
</c:url>
<a href="${website}">v512工作室</a>
//类似<jsp:include >不同的是可以包含其他web工程下的内容
<c:import url="http://www.v512.com/html/news.html" />
c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value="${token}"/><br>
</c:forTokens>
三. sql 标签
1 设置数据源
使用<sql:setDataSource>标签可以实现对数据源的配置。
【语法1】:直接使用已经存在的数据源。
<sql:setDataSource dataSource=”dataSource”[var=”name”]
[scope=”page|request|session|application”]/>
【语法2】:使用JDBC方式建立数据库连接。
<sql:setDataSource driver=”driverClass” url=”jdbcURL”
user=”username”
password=”pwd”
[var=”name”]
[scope=”page|request|session|application”]/>
其中database是javax.sql。DataSource(接口)
2 SQL操作标签
JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam>和<sql:transaction>这5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。
1.<sql:query>标签
<sql:query>标签用来查询数据。
<sql:setDataSource dataSource="jdbc/oracleds" var="ds"/>
<sql:query var="result" dataSource="${ds}" sql="select * from guestbook order by id desc" />
<table border="1">
<c:forEach var="row" items="${result.rows}" >
<tr>
<td> <c:out value="${row.id}" /></td>
<td> <c:out value="${row.name}" /></td>
<td> <c:out value="${row.email}" /></td>
</tr>
</c:forEach>
rows | Java.util.Map | 字段为索引的查询结果 |
rowCount | int | 总记录数 |
rowsByIndex | object[] | 数字索引结果 |
其他的需要时候自己查。
四. xml标签
解析如下的xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<softwares>
<software>
<name>Windows XP</name>
<producer>Microsoft</producer>
</software>
<software>
<name>Oracle 11g</name>
<producer>Oracle</producer>
</software>
<software>
<name>Eclipse</name>
<producer>Eclipse.org</producer>
</software>
</softwares>
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<html>
<body>
<c:import url="softwares.xml" var="url" />
//有人用doc表示要解析的文档
<x:parse xml="${url}" var="doc" />
<table border=1>
<tr>
<td>软件 </td>
<td>生产公司</td>
</tr>
<x:forEach var="n" select="$doc/softwares/software">
<tr>
<td>
<x:out select="$n/name" />
</td>
<td>
<x:out select="$n/producer" />
</td>
</tr>
</x:forEach>
</table>
</body>
</html>
这个不知道什么用。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<td>软件</td>
<td>生产公司</td>
</tr>
<xsl:for-each select="softwares/software">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="producer" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
五.结束语
剩下的两个和不会的遇到的时候自己查就是了。