1. 程式人生 > >JSTL標簽庫

JSTL標簽庫

不存在 0.00 rst 添加項 字符串常量 oos sql 註意 quest

一、JSTL的概述

1、Apache開發與維護,依賴EL表達式

2、Apache Tomcat安裝JSTL 庫步驟如下:

  從Apache的標準標簽庫中下載的二進包(jakarta-taglibs-standard-current.zip)。

  • 官方下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

  下載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,表示刪除所有域中該名稱的變量;如果指定了域,那麽只刪除該域的變量。
示例 說明
<%
pageContext.setAttribute("a","pageContext");
request.setAttribute("a","request");
session.setAttribute("a","session");
application.setAttribute("a","application");
%>
<c:remove var="a"/>
<c:out value="${a}" default="none"/>
刪除所有域中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位,它會四舍五入,如果不足兩位,不補位。

JSTL標簽庫