JSTL介绍:JavaServerPage Standard Tag Library
JSP标准标签库 由Apache实现
作用:使用JSTL标签 实现jsp页面中逻辑处理,如判断、循环等
JSTL在赋值时,会大量使用到EL表达式,可以简单理解成 EL是JSTL的一部分
使用JSTL步骤:
1.导入jar包 standard-1.1.2.jar、jstl-1.2.jar
2.在jsp页面中添加 taglib指令
<%@ taglib uri="" prefix="" %>
uri一般写http://java.sun.com/jstl/core,jstl核心包,prefix一般写c。
3.使用JSTL标签
JSTL常用标签:
1.表达式控制标签 set out remove catch
2.流程控制标签 if choose when otherwise
<c:set var=”a” value=”hello”/></c:set><!--在pageContext(默认)中添加name为a,value为hello的数据。-->
<c:set var=”a” value=”hello” scope=”session”/></c:set><!--在session中添加name为a,value为hello的数据。-->
<c:out value=”${aaa}” default=”xxx”/></c:out><!--输出${aaa},若不存在,输出xxx字符串-->
<%
pageContext.setAttribute("a","pageContext");
request.setAttribute("a","session");
session.setAttribute("a","session");
application.setAttribute("a","application");
%>
<c: remove var="a"/><!--删除所有域中name为a的数据!-->
<c:remove var="a" scope=”page”/><!--删除pageContext中name为a的数据-->
<c:catch var="catchException"><!-- var 变量名 随便写 捕获异常-->
<% int x = 5/0; %>
</c:catch>
<c:if test="${catchException !=null }"><!--test属性 测试 返回 结果 ture/false 如果是true 就执行 if标签内的内容-->
异常为:${catchException}<br>
发生了异常:${catchException.message}
</c:if>
<c:choose><!--相当于switch-->
<c:when test="${a==1}">aaaaaa</c:when><!-- 相当于case-->
<c:when test="${a==2}">bbbbbb</c:when>
<c:otherwise>cccc</c:otherwise><!-- 相当于default-->
</c:choose>
3.循环标签 forEach forTokens
var : 声明变量
begin : 开始(包含)
end : 结束(包含)
step : 步长(可不写)
itemes : 要遍历的数据(Collection Map Object数组 基本数据类型数组)
varStatus : 包含了一些forEach的属性
index: 索引 从0开始
count: 行号 从1开始
frist: 判断当前项是否是集合中的第一项 返回true/false
last: 判断当前项是否是集合中的最后一项 返回true/false
<c:forEach var="i" begin="2" end="10" step="2">
<c:out value="${i}"></c:out>
</c:forEach>
上面的例子和下面的相同
for(int i=2;i<=10;i+=2){
System.out.println(i);
}
<%
String[] arr = {"a","b","c","d"};
request.setAttribute("arr", arr);
for(String s : arr){
out.print(s);
}
%>
<c:forEach var="a" items="${arr}" >
${a}
</c:forEach>
<%
List<String> list = new ArrayList<>();
list.add("a");
list.add("d");
list.add("q");
pageContext.setAttribute("lists", list);
%>
<c:forEach var="s" items="${lists}">
${s}<br>
</c:forEach>
<hr>
<%
Map map = new HashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
request.setAttribute("maps", map);
%>
<c:forEach var="mymap" items="${maps}">
<!-- .key 就是获取键 .value 就是获取值 -->
<c:out value="${mymap.key }"></c:out>
<c:out value="${mymap.value }"></c:out>
<br>
</c:forEach>
<hr>
<%
List<String> list2 = new ArrayList();
list2.add("张三");
list2.add("李四");
list2.add("王五");
pageContext.setAttribute("list2", list2);
%>
<table border="1" align="center" width="400">
<tr>
<td>索引</td>
<td>姓名</td>
<td>统计</td>
<td>第一个</td>
<td>最后一个</td>
</tr>
<c:forEach var="vv" items="${list2}" varStatus="vs">
<tr>
<td>${vs.index}</td>
<td>${vv}</td>
<td>${vs.count}</td>
<td>${vs.first}</td>
<td>${vs.last}</td>
</tr>
</c:forEach>
</table>
上面例子的输出结果如图
forToken中多一个delims属性,意为字符串分隔符。该标签主要用来切割字符串,值代表被切掉的字符。
<%
List<String> list = new ArrayList();
list.add("abc");
list.add("b");
list.add("def");
list.add("b");
list.add("qq");
pageContext.setAttribute("lists", list);
%>
<c:forTokens items="${lists}" delims="b" var="ft">
<c:out value="${ft}"></c:out>
</c:forTokens>
<hr>
<!-- 使用切割符号 来切割字符串 -->
<c:forTokens items="A,C,E,U,I,Q" delims="," var="i">
${i}
</c:forTokens>
<hr>
<!-- 使用多个切割符号 来切割字符串 -->
<c:forTokens items="A,C|E,U,I|Q" delims="|," var="ii" begin="2" end="6" varStatus="iii">
${ii}
<c:out value="${iii.count}"></c:out>
</c:forTokens>
从上例可以看出,被切去的就没有了,varStatus.count计数是以新的字符串来计算的。
4.URL操作标签 import url redirect param
<!-- import 导入地址栏,可以获取到该地址的源代码-->
<c:import url="http://www.baidu.com" var="data"></c:import>
<c:out value="${data}"></c:out>
<!-- url 生成带有参数的url 作用 用于构造url 主要的用途是url的重写,可以转到新页面,地址栏会附带param值-->
<c:url var="myURL" value="a.jsp">
<c:param name="name" value="lalalal"></c:param>
<c:param name="age" value="23"></c:param>
</c:url>
<a href="<c:out value='${myURL}'/>">发送两个参数到a.jsp</a>
<!-- redirect重定向到新页面 -->
<c:redirect url="http://www.baidu.com"></c:redirect>
JSTL的另一类标签fmt,首行导入<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ,可以格式化时间和数字。格式化时间还需要导入<%@page import="java.util.Date"%>。
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
结果为 2018-03-28 20:39:11 当前时间
3.50 4.4