(1)什么是JSTL
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!
使用的时候需要自己导包 以及指定标签库
(2)JSTL标签库
JSTL一共包含四大标签库
1. core:核心标签库 (重要)
2. fmt: 格式化标签库 (两个关于日期和数字的)
3. sql:数据库标签库 (过时)
4. xml:xml标签库(过时)
(3)使用taglib指令导入标签库
除了jsp动作标签外 使用其他第三方的标签库都需要
导包
使用标签的jsp页面使用taglib指令导入标签库
例如:<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
prefix="c":指定标签库的前缀,这个前缀可以随便定义 大家都会在使用core标签库时指定前缀为c
uri="" :指定标签库的uri
(4)core标签库常用标签
out :向页面输出内容
<c:out value="" default="" escapeXml=""/>
value:可以直接输出字符串 <c:out value="aaa"/>
可以输出域对象当中的内容 输出域对象当中的内容 结合EL表达式 <c:out value="${a }"> 取出域对象当中属性名称为a的值
default: 当域对象当中指定的属性不存在,那么可以指定默认值。
escapeXml: 是否带有xml的格式。 默认值true。 原样输出。 false, 解析脚本输出。
set :想域对象当中存属性和属性值
<c:set var="" value="" scope=""/>
var:域对象当中的属性名称。
value: 属性名称对象的属性值。
scope: 指定的域。 默认不指定是page域。 其他值: request session application
remove:从域对象当中移除属性
<c:remove var="" scope=""/>
var: 域对象当中的属性的名称。
scope: 指定从某个域对象当中移除。 如果不指定,默认从整个web域当中移除。
url标签
<c:url value="/" /> 获得当前web应用的名称 并且打印
例如:<form action="<c:url value="/"/>servlet/AServlet">
<input type="submit" value="提交">
</form>
<c: url value="/servlet/ASerevlet" var ="" scope=""/>
var:域对象当中url地址的名称
将url地址,存放在默认的域当中。默认域是page
scope: 指定将url的值存放在某个域当中
例如: <c:url value="/servlet/AServlet" var="url" scope="session"/>
<a href="${url }">提交</a>
作为双标签 :对url的值追加参数 如果追加的参数有中文 可以自动的URL编码
例如
<c:url value="/servlet/AServlet" var="url">
<c:param name="username" value="liu"></c:param>
<c:param name="password" value="1223"></c:param>
</c:url>
<a href="${url }">提交</a>
url标签可以实现URL的重写
if 标签:类似于java的if(){}语句
<c:if test="" >
标签体内容。
</c:if>
test: 值必须是boolean。如果返回true, 执行if标签体当中的内容。
choose 标签:
类似于java的if(){} else if(){} else{}
<c:set var="score"value="${param.score }"/>
<c:choose>
<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<c:when test="${score >= 90 }">A级</c:when>
<c:when test="${score >= 80 }">B级</c:when>
<c:when test="${score >= 70 }">C级</c:when>
<c:when test="${score >= 60 }">D级</c:when>
<c:otherwise>E级</c:otherwise>
</c:choose>
foEach 标签
用来计数 类似于传统的for循环
<c:forEach begin="1" step="1" end="10" var="a">
${a }
</c:forEach>
begin: 起始位置。
end:结束位置。
step:循环增量。 默认是1.
var: 变量在域对象当中的名字
遍历 数组
<%
String [] arr={"a","b","c"};
pageContext.setAttribute("ns", arr);
%>
<c:forEach var="item" items="${ns }" varStatus="vs">
<c:out value="${item }"/>
</c:forEach>
var="name" 遍历出来的每个元素。 类似于临时变量
items="${}" 从域当中获得指定的对象
集合
varStatus: 带有循环状态的变量。 只能应用在遍历数组和list集合当中。
属性:index 获得元素的索引位置。
count 获得元素的位置。
current 获得当前的元素。
first: 判断是否是第一个元素。 是第一个元素返回true。
last: 判断是否是最后一个元素,是最后一个元素就返回true。
<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 >遍历Map集合
<%
Map<String,String> map=new HashMap<String,String>();
map.put("name", "lisi");
map.put("pass", "123");
map.put("sex", "nan");
pageContext.setAttribute("map", map);
%>
<c:forEach var="item" items="${map }">
<c:out value="${item.key }:${item.value }"/>
</c:forEach>
(5)fmt标签库常用标签
fmt标签库时用来格式化输出的 通常需要格式化的有时间和数字
导库:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
格式化时间
<%
Date d=new Date();
pageContext.setAttribute("date", d);
%>
<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>
value: 从域对象当中获得属性值。 并且输出在页面上。
pattern : 指定输出的格式。
格式化数字
<%
double d1=3.12;
double d2=3.5;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
value: 从域对象当中获得属性值。 并且输出在页面上。
pattern : 指定输出的格式。
格式:#:代表的是任意数字 如果指定的格式位数多,多余的位数 不用0 补齐
0:可以代表任意的数字 如果指定的格式位数少 多余的位数使用0补齐
指定的位数少于输出的数字 采用四舍五入截取