【JSTL的概述】
JSTL 1.0 :不支持EL表达式;JSTL 1.1和1.2 : 支持EL表达式。
JSTL的标签库,包含五类标签
core 核心标签,fmt 国际化标签,fn(JSTL提供EL函数库)
标签库功能描述 标签库的URI 建议前缀
核心标签库 http://java.sun.com/jsp/jstl/core c
XML标签库 http://java.sun.com/jsp/jstl/xml x
国际化/格式化标签库 http://java.sun.com/jsp/jstl/fmt
fmt
数据库标签库 http://java.sun.com/jsp/jstl/sql
sql
EL自定义函数 http://java.sun.com/jsp/jstl/functions fn
下面对JSTL的各个标签库进行简单的介绍:
(1)核心标签库中包含了实现WEB应用中的通用操作的标签。例如,用于输出一个变量内容的标签、用于条件判断的标签、用于迭代循环的标签。
(2)国际化/格式化标签库中包含实现WEB应用程序的国际化的标签。例如,设置JSP页面的本地信息、设置JSP页面的时区、绑定资源文件,使本地敏感的数据(例如数值、日期等)按照JSP页面中设置的本地格式显示。
(3)数据库标签库中包含用于访问数据库和对数据库中的数据进行操作的标签。例如,从数据源中获得数据库连接、从数据库表中检索数据等。由于在软件分层的开发模型中,JSP页面仅用作表现层,我们一般不在JSP页面中直接操作数据库,而是在业务逻辑层或数据访问层操作数据库,所以,JSTL中提供的这套数据库标签库没有多大的实用价值。
(4)XML标签库中包含对XML文档中的数据进行操作的标签。例如,解析XML文档、输出XML文档中的内容,以及迭代处理XML文档中的元素。因为XML广泛应用于WEB开发,对XML文档的处理非常重要,XML标签库使处理XML文档变得简单方便,这也是JSTL的一个重要特征。
(5)JSTL中提供的一套EL自定义函数包含了JSP页面制作者经常要用到的字符串操作。例如,提取字符串中的子字符串、获取字符串的长度和处理字符串中的空格等。
使用JSTL:
*引入JSTL的Jar包
*在页面中引入标签库.<%@ taglib uri=”” prefix=”“%>
【JSTL核心标签用法】
<%@ 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>JSTL</title>
</head>
<body>
<h1> JSTL的核心标签</h1>
<c:set var="n1" value="10" scope="page"> </c:set>
<c:set var="n2" value="20" scope="page"> </c:set>
<c:if test="${ n1 < n2 }">
hello world
</c:if>
|属性名 |是否支持EL| 属性类型| 属 性 描 述
|value |true |Object |指定要输出的内容
|escapeXml |true |Boolean |指定是否将>、<、&、’、” 等特殊字符进行HTML编码转换后再进行输出。默认值为true
|default |true |Object |指定如果value属性的值为null时所输出的默认值
【C:out】
标签标签有两种语法格式:
语法1,没有标签体的情况:
<body>
<h1>JSTL提供的EL的函数库</h1>
${ fn:contains("hello world","hello") }
${ fn:length("hello world") }
${ fn:toLowerCase("ABCDEF") }
<c:forEach var="i" items='${ fn:split("a-b-c-d","-") }'>
${ i }
</c:forEach>
【JSTL的fn】
JSTL提供的EL的函数库
fn:contains(“helloworld”,”hello”)
{ fn:length(“hello world”) }
${ fn:toLowerCase(“ABCDEF”) }
${ i }
<h1>JSTL的常用标签</h1>
<c:set var="i" value="tommy" scope="page"></c:set>
${ i }
<c:set var="city" value="shanghai" scope="page"></c:set>
${ city }
<c:out value="${ city }" default="Hans"></c:out>
<c:out value="<h1>title1</h1>" escapeXml="false"></c:out>
<c:out value="hello"></c:out>
<c:set var="n1" value="10" scope="page"> </c:set>
<c:set var="n2" value="20" scope="page"> </c:set>
<c:if test="${ n1<n2 }" var="flag" scope="page">
n1 less than n2
</c:if>
<c:if test="${ n1>=n2 }">
n1 great than n2
</c:if>
<c:if test="${ flag }">
n1 less than n2
</c:if>
<hr>
<h1>foreach label</h1>
<%
String[] arrs = {"aaa","bbb","ccc"};
pageContext.setAttribute("arrs", arrs);
List<String> list = new ArrayList<String>();
list.add(0, "tommy");
list.add(1, "hans");
list.add(2, "johnson");
pageContext.setAttribute("list", list);
Map<String,String> map = new HashMap<String,String>();
map.put("aaa", "tommy");
map.put("vvv","hans");
map.put("ccc", "lily");
pageContext.setAttribute("map", map);
%>
<c:forEach var="i" items="${ arrs }">
${ i }
</c:forEach>
<c:forEach var="i" items="${ list }">
${ i }
</c:forEach>
<c:forEach var="entry" items="${ map }">
${ entry.key }
${ entry.value }
</c:forEach>
<hr>
<h3>遍历从0到10</h3>
<c:forEach var="i" begin="1" end="10" step="2">
${ i }
</c:forEach>
<hr>
<c:forEach var="i" begin="100" end="300" step="5" varStatus="status">
<c:if test="${ status.count %3 == 0 }">
<font color="red"> ${ i } </font>
</c:if>
<c:if test="${ status.count %3 != 0 }">
<font color="green"> ${ i } </font>
</c:if>
</c:forEach>
【在页面显示商品列表】
<h1>商品列表页面</h1>
<table border="1" width="1000">
<tr>
[]
<td>商品的编号</td>
<td>商品的价格</td>
<td>商品的名称</td>
<td>商品的描述</td>
</tr>
<c:forEach var="p" items="${ list }"></c:forEach>
<tr>
<td>${ p.pid }</td>
<td>${ p.pname }</td>
<td>${ p.market_price }</td>
<td>${ p.date }</td>
</tr>
</table>