JSTL JSTL就是JSP標準標簽庫(JavaServer Pages Standard Tag Library, JSTL)是一個定製標簽庫的集合,用來解決像遍歷Map或集合、條件測試、XML處理,甚至資料庫訪問和數據操作等常見的問題。 (JSTL的使用需要有配置好兩個jar包,分別是jstl. ...
JSTL
JSTL就是JSP標準標簽庫(JavaServer Pages Standard Tag Library, JSTL)是一個定製標簽庫的集合,用來解決像遍歷Map或集合、條件測試、XML處理,甚至資料庫訪問和數據操作等常見的問題。
(JSTL的使用需要有配置好兩個jar包,分別是jstl.jar和standard.jar)
JSTL庫
JSTL是標準標簽庫,但它是通過多個標簽庫來暴露其行為的。
區域 |
子函數 |
URI |
首碼 |
核心 |
變數支持 |
http://java.sun.com/jsp/jstl/core |
c |
流控制 |
|||
URL管理 |
|||
其他 |
|||
XML |
核心 |
http://java.sun.com/jsp/jstl/xml |
x
|
流控制 |
|||
轉換 |
|||
國際化 |
語言區域 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
消息格式化 |
|||
數字和日期格式化 |
|||
資料庫 |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
函數 |
集合長度 |
http://java.sun.com/jsp/jstl/functions |
fn |
在JSP頁面中使用JSTL庫,必須通過以下格式在JSP頁面的開頭作出聲明:
<%@ taglib uri="以上表格中對應的uri" prefix="以上表格中對應的首碼"%>
(在開始進行學習JSTL之前需要掌握EL表達式的用法,可以參考Servlet和JSP之有關Servlet和JSP的梳理(二),但基本格式是"%{....}")
常用核心標簽介紹 -----> <%@taglib uri=”http://java.sun.com/jsp/jstl/core prefix=”c”%>
JSTL的核心標簽庫標簽共13個,從功能上可以分為4類:
表達式控制標簽 |
out、set、remove、catch |
流程式控制制標簽 |
if、choose、when、otherwise |
迴圈標簽 |
forEach、for、Tokens |
URL操作標簽 |
import、url、redirect |
表達式控制標簽詳解之out
① 輸出常量
可在value屬性中直接賦值。
<c:out value="this is our first JSTL demo"></c:out><br>
② 輸出變數
變數不存在時可配合default屬性輸出預設值,還可以通過escapeXml控制轉義字元的輸出方式。
<%String username = "zhangsan";request.setAttribute("username", username); %> <c:out value="${username }"></c:out> <c:out value="${name }" default="error"></c:out><br> <c:out value=">out標簽lt" escapeXml="false"></c:out><br>
表達式控制標簽詳解之set
① 存值到scope中
可將值以變數形式存放在指定的範圍中(2種方式)。
<c:set value="today" var="day" scope="session"></c:set> <c:out value="${day }"></c:out> <c:set var="age" scope="application">eleven</c:set> <c:out value="${age }"></c:out>
② 存值到JavaBean的屬性中
需要配合target屬性指定對象並且通過property屬性指定要賦值給對象中的哪個屬性。
<jsp:useBean id="person" class="com.imooc.test.Person"></jsp:useBean>
<c:set target="${person }" property="address" > Guangzhou</c:set> <c:out value="${person.address }"></c:out>
表達式控制標簽詳解之remove
remove掉某個變數,var屬性是必選,scope屬性是可選。
<c:remove var="job" scope="session"></c:remove>
表達式控制標簽詳解之catch
catch標簽中可以包含那些容易出錯的JSTL標簽(邏輯)。
<c:catch var="error"> <c:set target="aa" property="vv">dw</c:set> </c:catch> <c:out value="${error }"></c:out>
流程式控制制標簽詳解之if
同程式中的if作用相同,用來實現分支條件控制。
<c:if test=”” var=”” scope=””></c:if>
test屬性用於存放判斷的條件,一般使用EL表達式來編寫,var指定名稱用來存放判斷的結果類型為true或false,scope用來存放var屬性存放的範圍。
<c:if test="${param.score>=90 }" var="result" scope="application"> <c:out value="恭喜,您的成績是優秀"></c:out> </c:if>
流程式控制制標簽詳解之choose、when、otherwise
通常這三個標簽被放在一起配合使用,<c:choose>標簽嵌套在<c:when>和<c:otherwise>標簽的外面作為他們的父標簽來使用,其中choose和when標簽也可以一起組合使用。
通常有以下兩種語法結構:
用法一:3個標簽同時使用。
<c:choose> <c:when test="${param.score>=90 && param.score<=100 }"> <c:out value="優秀"></c:out>
</c:when> <c:otherwise> <c:out value="輸入的數據不符合"></c:out>
</c:otherwise>
</c:choose>
用法二:只使用choose標簽和when標簽。
<c:choose> <c:when test="${param.score==100 }"> <c:out value="太棒了,你是第一名"></c:out> </c:when> </c:choose>
迴圈控制標簽詳解之forEach
根據迴圈條件遍歷集合(Collection)中的元素,var設定變數名用於存儲從集合中取出元素(必須無預設值),items指定要遍歷的集合(必須無預設值),begin、end用於指定遍歷的起始位置和終止位置(有預設值), step指定迴圈的步長(有預設),varStatus通過index、count、first、last幾個狀態值,描述begin和end子集中的元素的狀態。
常用用法1------全部遍歷。
<c:forEach var=”存儲當前遍歷元素的變數” items=”待遍歷集合”> 操作var變數表示的元素<br> </c:forEach>
常用用法2------部分遍歷。
<c:forEach var=”存儲當前遍歷元素的變數” items=”待遍歷集合” begin=”開始遍歷元素的index值” end=”結束遍歷的元素的index值”> 操作var變數表示的元素<br> </c:forEach>
常用用法3------部分遍歷中指定步長。
<c:forEach var=”存儲當前遍歷元素的變數” items=”待遍歷集合” begin=”開始遍歷元素的index值” end=”結束遍歷的元素的index值” step=”部分遍歷中每次遍歷的間隔元素個數”> 操作var變數表示的元素<br>
</c:forEach>
常用用法4------部分遍歷時輸出元素的狀態。
<c:forEach var=”存儲當前遍歷元素的變數” items=”待遍歷集合” begin=”開始遍歷元素的index值” end=”結束遍歷的元素的index值”
step=”部分遍歷中每次遍歷的間隔元素個數” varStatus=”指定一個變數用來存儲當前元素的狀態值”> 操作var變數表示的元素<br> </c:forEach>
以上的用法的例子如下:
<c:forEach var="fruits" items="${fruits }" begin="1" end="3" step="2" varStatus="fru"> <c:out value="${fruits }的四個屬性值"></c:out><br> <c:out value="index屬性:${fru.index }"></c:out><br> <c:out value="count屬性:${fru.count }"></c:out><br> <c:out value="first屬性:${fru.first }"></c:out><br> <c:out value="last屬性:${fru.last}"></c:out><br> </c:forEach>
迴圈控制標簽詳解之forTokens
用於瀏覽字元串,並根據指定的字元將字元串截取, items指定被迭代的字元串,delims指定使用的分隔符,var指定用來存放遍歷到的成員,begin、end用於指定遍歷的起始位置和終止位置(有預設值),step指定迴圈的步長(有預設), varStatus通過index、count、first、last幾個狀態值,描述begin和end。
<c:forTokens items="010-2342413-123" delims="-" var="num"> <c:out value="${num }"></c:out> </c:forTokens>
URL操作標簽詳解之import
作用:
- 可以把其他靜態或動態文件包含到本JSP頁面。
- 同<jsp:include>的區別為:只能包含同一個web應用中的文件。而<c:import>可以包含其他web應用中的文件,甚至是網路上的資源。
- 格式如下,其中,url:被導入資源的URL路徑, context:相同伺服器下其他的web工程,必須以”/”開頭(因為context引入的內容是webapps下的其他Web project,所以需要修改tomcat的發佈路徑和修改%TOMCAT_HOME%conf/context.xml的Context標簽中的屬性crossContext=”true”), var:以String類型存入別包含文件的內容,Scope:var變數的JSP範圍, charEncoding:被導入文件的編碼格式,varReader:以Reader類型存儲被包含文件內容。
<c:import url=”” context=“” var=”” scope=””charEncoding=”” varReader=””></c:import>
URL操作標簽詳解之redirect
該標簽用來實現請求的重定向,同時可以在url中加入指定的參數,url指定重定向的地址,可以是一個string類型的絕對地址或相對地址。,context用於導入其他web應用中的頁面。
<c:redirect url="firstDemo.jsp"> <c:param name="username">Lily</c:param> <c:param name="password">a</c:param> </c:redirect>
URL操作標簽詳解之url
該標簽用於動態生成一個String類型的URL,可以同<c:param>標簽共同使用,也可以使用html的<a>標簽實現超鏈接,value 表示url路徑值,var 將url路徑存儲在變數中,scope var變數的範圍。
常用函數標簽介紹 -------> <%@taglib uri=”http://java.sun.com/jsp/jstl/ffunctions prefix=”fn”%>
基本的格式是:
${fn:functionName}
函數名 |
說明 |
語法 |
contains函數 |
contains函數用於測試一個字元串中是否包含指定的子字元串。如果字元串中包含該子字元串,則返回值True,否則返回False。 |
contains(String, substring) |
containsIgnoreCase函數 |
containsIgnoreCase函數與contains函數相似,但測試是區分大小寫的。 |
containsIgnoreCase(String,substring) |
endsWith函數 |
endsWith函數用於測試一個字元串是否以指定的尾碼結尾,其返回值是一個Boolean。 |
endsWith(String, suffix) |
escapeXml函數 |
escapeXml函數用於給String編碼。這種轉化與out標簽將其escapeXml屬性設為True一樣。 |
escapeXml(String) |
indexOf函數 |
indexOf函數返回指定子字元串在某個字元串中第一次出現時的索引。如果沒有找到指定的子字元串,則返回-1、 |
indexOf(String, substring) |
join函數 |
join函數將一個String數組中的所有元素都合併成一個字元串,並用指定的分隔符分開。 |
join(array, separator) |
length函數 |
length函數用於返回集合中的項目數,或者字元串中的字元數。 |
length(input) |
replace函數 |
replace函數將字元串中出現的所有beforeString用afterString替換,並返回結果。 |
replace(String, beforeSubstring, afterSubstring) |
split函數 |
split函數用於將一個字元串分離成一個子字元串數組,他的作用與join函數相反。 |
split(String, separator) |
startsWith函數 |
startsWith函數用於測試一個字元串是否以指定的首碼開頭。 |
startsWith(String, prefix) |
substring函數 |
substring函數用於返回一個從指定基於0的起始索引(含)到指定基於0的終止索引的子字元串。 |
substring(String, beginIndex, endIndex) |
substringAfter函數 |
substringAfter函數用於返回指定子字元串第一次出現後的字元串部分。 |
substringAfter(String, substring) |
substringBefore函數 |
substringBefore函數用於返回指定子字元串第一次出現前的字元串部分。 |
substringBefore(String, substring) |
toLowerCase函數 |
toLowerCase函數將一個字元串轉換成它的小寫版本。 |
toLowerCase(String) |
toUpperCase函數 |
toUpperCase函數將一個字元串轉換陳給它的大寫版本。 |
toUpperCase(String) |
trim函數 |
trim函數用於刪除一個字元串開頭和結尾的空白。 |
trim(String) |