JSTL概述
apache的東西,依賴於EL
使用jstl需要導入jstl.jar包
標籤庫
- core 核心標籤庫
- fmt 格式化標籤庫
- sql 數據庫標籤庫,過時
- xml xml標籤庫,過時
JSTL標籤庫
四大標籤庫
- core 核心庫
- fmt 格式化標籤庫
- sql 數據庫標籤庫,過時
- xml xml標籤庫,過時
導入標籤庫
使用taglib命令
除了jsp的動作標籤外,使用其他的第三方的標籤庫都需要導包
在jsp頁面內導標籤庫
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
prefix 指定標籤的前綴,這個前綴可以隨便給值,但是大家都會在使用core標籤是指定前綴爲 c
uri 指定 標籤庫的uri ,他不一定是真實存在的網址
core標籤庫的常用標籤
core –> c標籤
out和set
remove
url
if
choose
forEach
out
* <c:out value="aaa"/>
* 輸出字符串aaa
* <c:out value="${aaa}"/>
* 輸出域屬性aaa,其中與${aaa}相同
* <c:out value="${aaa}" default="xxx"/>
* 如果${aaa}不存在,那麼輸出xxx字符串如果${aaa}中包含特殊字符,那麼轉義它。這可以防止javascript攻擊,添加escapeXml 之後就不能防止script攻擊
例如:
<%
request.setAttribute("xxx", "<script>alert('12345');</script>");
%>
<c:out value="${xxx }" escapeXml="false"/>
set
創建域的屬性
<c:set var="a" value="hello" />
* 在pageContext中添加name爲a,value爲hello的數據
<c:set var="b" value="hello" scope="session" />
* 在session中添加name爲b,value爲hello的數據,變量值可以爲el表達式
* scope:域,默認爲page,可選值爲,page,request,session,application
remove
<c:remove var="a" />
* 刪除所有域中的name爲a的數據
* var: 變量名
* scope: 如果不給出scope,表示刪除所有域中該名稱變量,如果指定了,就只刪除該域的變量
url
* value: 指定一個路徑,他會在路徑前面自動添加項目名。
* <c:url value="/index.jsp" /> 他會輸出/Test/index.jsp
*子標籤:<c:param>,用來給url後面添加參數,例如:
<c:url value="/index.jsp" >
<c:param name="username" value="zhangsan" /><!--可以對參數進行url編碼!!-->
</c:url>
//結果爲:/Test/index.jsp?username=%ED%2c%d
* 指定變量名,一旦添加了這個屬性,那麼url標籤就不會再輸出到頁面,而是把生成的url保存到域中
* scope: 他與var一起使用,用來保存url。
if
if : 對應Java中的if語句
<c:if test="布爾類型">..</c:if>
choose
<c:choose>
<c:when test="${條件1}">a</c:when>
<c:when test="${條件2}">b</c:when>
<c:when test="${條件3}">c</c:when>
<c:otherwise>d</c:otherwise> //default
</c:choose>
forEach
可以用來循環遍歷數組,集合
還可以用來計數
//計數
<c:forEach var="i" begin="1" end = "10">
${i}<br>
</c:forEach>
屬性介紹:
* var 循環變量
* begin 設置循環變量初始值
* end 設置循環變量結束值
* step 設置步長,等同於 i++或者是i += 2,默認爲1
用來輸出數組和集合
<%
String[] strs = {"one", "two", "three", "four", "five"};
request.setAttribute("strs", strs);
%>
<c:forEach items="${requestScope.strs }" var ="str">
${str }
</c:forEach>
等同於增強for
for(String str:strs){
...
}
屬性:
* items: 指定要循環的對象,他可以是一個數組,或者是一個集合
* var: 把數組和集合中的每一個元素賦值個var指定的變量。
**注意:items中不能有空格,否則這個錯誤很難發現,既不能寫爲 items="${param.name } " **
**引號內是不能夠有空格,el表達式中可有**
循環狀態
可以使用varStatus來創建循環狀態變量
屬性:
* count 循環元素的個數
* index 循環元素的下標
* first 是否爲第一個元素
* last 是否爲最後一個元素
* current 當前元素
<c:forEach items="${requestScope.strs }" var ="str" varStatus="vs">
${vs.index }${vs.count }${vs.first }${vs.last }${vs.current} ${str }
<br>
</c:forEach>
fmt標籤庫常用標籤
格式化時間
<%
Date date = new Date();
pageContext.setAttribute("date", date);
%>
<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>
屬性介紹
* value 指定一個Date類型的變量
* pattern 用來指定輸出的模板!例如:yyyy-MM-dd HH:mm:ss
<fmt:formatNumber value="${num }" pattern="0.000" />
// 取捨是四捨五入,不夠爲補 0
<fmt:formatNumber value="${num }" pattern="#.###" />
// 取捨時四捨五入, 不夠不補位 0