JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL标签是基于JSP页面的,这些标签可以插入在JSP代码中,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。
核心标签core:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix="c":指定标签库的前缀,这个前缀可以随便给值。
uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;
1.<c:set>标签用于设置变量值和对象属性。
<c:set
var="<string>" //存储信息的变量
value="<string>" //要存储的值
target="<string>" //要修改的属性所属的对象
property="<string>" //要修改的属性
scope="<string>"/> //var作用域
2.<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
<c:if test="<boolean>" var="<string>" scope="<string>">
... //test是条件,var是存储条件结果的变量,scope是var作用域
</c:if>
3.<c:forEach>标签它迭代一个集合中的对象。
<c:forEach
items="<object>" //要循环的信息
begin="<int>" //开始元素 0是第一个
end="<int>" //最后一个元素
step="<int>" //每一次迭代的步长
var="<string>" //代表当前条目的变量名称
varStatus="<string>"> //代表循环状态的变量名称
...
例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。
count:int类型,当前已遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。
<c:forEach var="item" items="${ns}" varStatus="vs">
<c:if test="${vs.first }">第一行:</c:if>
<c:if test="${vs.last }">最后一行:</c:if>
<c:out value="第${vs.count }行: "/>
<c:out value="[${vs.index }]: "/>
<c:out value="name: ${vs.current }"/><br/>
</c:forEach>
4.<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。
<c:forTokens
items="<string>"
delims="<string>" //分隔符
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。
引用格式化标签库的语法如下:
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>
1.<fmt:formatNumber>标签用于格式化数字,百分比,货币。
<fmt:formatNumber
value="<string>" //要显示的数字
type="<string>" //类型
pattern="<string>" //格式
currencyCode="<string>"
currencySymbol="<string>"
groupingUsed="<string>"
maxIntegerDigits="<string>"
minIntegerDigits="<string>"
maxFractionDigits="<string>"
minFractionDigits="<string>"
var="<string>"
scope="<string>"/>
2.<fmt:formatDate>标签用于使用不同的方式格式化日期。
<fmt:formatDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
timeZone="<string>"
var="<string>"
scope="<string>"/>
测试:
<%@page import="cn.gakki.entity.Student"%>
<%@page import="java.sql.Date"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'jstlel.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
//1.准备数据
int n=70;//基本类型
double avgScore = 57.45678;//基本类型
//Student stu = null;
Student stu = new Student();//引用类型
stu.setSno(1);
stu.setSname("张晓红");
stu.setBirth(Date.valueOf("1999-12-12"));
String [] strs = {"Java","Oracle","JSP","HTML"};//数组
String courses="Java,Oracle,JSP,HTML,Servlet";//特殊的字符串
String courses2="Java#Oracle#JSP#HTML#Servlet";//特殊的字符串
String str = null;
String str3 = "";
List list = new ArrayList();//分配空间,没有元素
list.add(90);
list.add(80);
List list2 =null;//没有分配空间
List list3 =new ArrayList();//分配空间,没有元素 size()==0
Map<String,String> map = new HashMap<String,String>();//Map
map.put("cn", "China");
map.put("fr", "France");
//setAttribute
request.setAttribute("r1",n);
request.setAttribute("avgScore",avgScore);
request.setAttribute("stu",stu);
request.setAttribute("strs",strs);
request.setAttribute("courses",courses);
request.setAttribute("courses2",courses2);
request.setAttribute("now",new java.util.Date());
request.setAttribute("list", list);
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
request.setAttribute("map", map);
request.setAttribute("str", str);
request.setAttribute("str3", str3);
//2.使用JSTL和EL输出
%>
n:${r1}<br>
n:${requestScope.r1}<br>
avgScore:${avgScore}<br>
avgScore:<fmt:formatNumber value="${avgScore}" maxFractionDigits="2"></fmt:formatNumber><br>
姓名:${stu.sname}<br>
日期:<fmt:formatDate value="${stu.birth}" pattern="yyyy年MM月dd日"></fmt:formatDate><br>
<c:forEach items="${strs}" var="us">
${us}-->
</c:forEach><br>
<c:forEach items="${courses}" var="us">
${us}--
</c:forEach><br>
<c:forTokens items="${courses2}" delims="#" var="us">
${us}<---->
</c:forTokens><br>
<c:forEach items="${list}" var="li">
${li}-
</c:forEach><br>
<c:forEach items="${map}" var="m">
${m.key}-->${m.value}<br>
</c:forEach><br>
每一页显示:
<select>
<c:forEach begin="5" end="25" step="5" var="size">
<option>${size}</option>
</c:forEach>
</select>条
<br>
${empty list2}<br>
${not empty list3}
</body>
</html>