一、JSTL的概述 1、Apache開發與維護,依賴EL表達式 2、Apache Tomcat安裝JSTL 庫步驟如下: 從Apache的標準標簽庫中下載的二進包(jakarta-taglibs-standard-current.zip)。 官方下載地址:http://archive.apache. ...
一、JSTL的概述
1、Apache開發與維護,依賴EL表達式
2、Apache Tomcat安裝JSTL 庫步驟如下:
從Apache的標準標簽庫中下載的二進包(jakarta-taglibs-standard-current.zip)。
下載jakarta-taglibs-standard-1.1.2.zip 包並解壓,將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下。
3、四大庫
- core:核心庫
- fmt:格式化,日期和數字
- sql:過時
- xml:過時
4、使用taglib指令導入標簽庫
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5、core標簽庫常用標簽
①out和set
- <c:out>:輸出
- value:可以是字元串常量,也可以是EL表達式
- default:當要輸出的內容為null時,會輸出default指定的值
- escapeXml:預設值為true,表示轉義。
示例 | 說明 |
<c:out value="aaa"/> | 輸出aaa字元常量 |
<c:out value="${aaa}"/> | 與${aaa}相同,全域查找 |
<c:out value="${aaa}" default="xxx"/> | 當${aaa}不存在時,輸出xxx字元 |
<% request.setAttribute("a","<script>alert('hello');</script>"); %> <c:out value="${a}" default="xxx" escapeXml="false"/> |
當escapeXml為false,不會轉換“<”、">"。 這可能會收到JavaScript攻擊。 |
- <c:set>:設置(創建域的屬性)
- var:變數名
- value:變數值,可以是EL表達式
- scope:域,預設為page,可選值,page、request、session、application。
示例 | 說明 |
<c:set var="a" value="hello"/> | 在pageContext中添加name為a,value為hello的數據 |
<c:set var="a" value="hello" scope="sesssion"/> | 在session中添加name為a,value為hello的數據 |
②remove
- <c:remove>:刪除域變數
- var:變數名
- scope:如果不給出scope,表示刪除所有域中該名稱的變數;如果指定了域,那麼只刪除該域的變數。
示例 | 說明 |
<% |
刪除所有域中name為a的數據。 |
<c:out value="${a}" scope="page"/> |
刪除pageContext中name為a的數據 |
③url:url標簽會在需要URL重寫時添加sessionId 。
- value:指定一個路徑,它會在路徑前面自動添加項目名。
- <c:url value="/index.jsp/">,它會輸出/day13_1/index.jsp
- 子標簽:<c:param>,用來給url後面添加參數。
- var:指定變數名,一旦添加了這個屬性,那麼url標簽就不會再輸出到頁面,而是把生成url保存到域中。
示例 | 說明 |
<c:url value="/"/> |
輸出上下文路徑:/day08_1/ |
<c:url value="/" var="a" scope="request"/> |
把本該輸出的結果賦給變數a,範圍為request |
<c:url value="/AServlet"/> |
輸出上下文路徑:/day08_1/AServlet |
<c:url value="/AServlet"> <c:param name="username" value="abc"/> <c:param name="password" value="123"/> </c:url> |
輸出:/day08_1/AServlet?username=abc&password=123 如果參數中包含中文,那麼會自動使用URL編碼。 |
④if:if標簽的test屬性必須是一個boolean類型的值,如果test的值為true,那麼執行if標簽的內容,否則不執行。
<c:set var="a" value="hello"/> <c:if test="${not empty a}"> <c:out value="${a}"/> </c:if>
⑤choose:choose標簽對應Java中的if/else if/else結構。when標簽的test為true時,會執行這個when的內容。當所有when標簽的test都為false時,才會執行otherwise標簽的內容。
<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>
⑥forEach:它用來循序遍曆數組、集合,還可以用來計算方式來迴圈。
<%--計數方式,1<=i<=10 --%>
<c:forEach var="i" begin="1" end="10" step="2">
${i}
</c:forEach>
//等同於下式
for(int i = 1; i <= 10; i++){}
屬性:
- var:迴圈變數
- begin:設置迴圈變數從幾開始
- end:設置迴圈變數到幾結束。
- step:設置步長,等同於i++,或i+=2,step預設為1.
<!-- 輸出數組、集合 -->
<c:forEach items="${strs}" var="str">
${str }<br/>
</c:forEach>
//等同於 for(String str: strs ){...}
屬性:
- items:指定要迴圈誰,它可以是一個數組或一個集合
- var :把數組或集合中的每個元素賦值給var指定的變數。
- 註意:在 items="${strs }"中,“ }" ”大括弧與雙引號之間不能有空格。
迴圈狀態:可以使用varStaturs來創建迴圈狀態變數。
<%
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="ele" varStatus="vs">
${vs.count} ${vs.index} ${vs.first} ${vs.last}
</c:forEach>
迴圈狀態變數有如下屬性:
- count:迴圈元素的個數。
- index:迴圈元素的下標。
- first:是否為第一個元素
- last:是否為最後一個元素
- current:當前元素
6、fmt庫:格式化庫
①格式化日期
<fmt:formatDate value="" pattern=""/>
<%
Date date = new Date();
request.setAttribute("d",date);
%>
<fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"/>
- value:指定一個Date類型的變數
- pattern:用來指定輸出的模板。
<fmt:formatNumber value="${num1}" pattern="0.00">
保留小數點後2位,它會四捨五入,如果不足兩位,以0補位。
<fmt:formatNumber value="${num1}" pattern="#.##">
保留小數點後2位,它會四捨五入,如果不足兩位,不補位。