JavaServer Pages Standard Tag Library
目 錄
JSTL簡介 (1)
核心標籤庫(Core Tag Library) (1)
運算式操作(General Expression Tags) (2)
流程控制(Conditional Tags) (5)
迭代操作(Iterator Tags) (7)
URL操作(Import Tags) (10)
I18N格式標籤庫(I18N-Capable Formatting Tags) (14)
國際化格式標籤 (14)
訊息格式標籤 (15)
數字日期格式化標籤 (19)
SQL標籤庫(SQL Tags) (25)
設定資料庫連線 (25)
SQL存取指令 (26)
函式標籤庫(Function Tags) (31)
JSTL簡介
?JavaServer Pages Standard Tag Library (1.1) – JSP標準標籤函式庫,應用於基本輸
出、輸入、流程控制、迴圈、XML文件剖析、資料庫查詢及國際化文字格式標準
化(UTF)等。主要分為以下五大類
JSTL Prefix
URI Example 核心標籤庫
(Core Tag Library)
c https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core
I18N格式標籤庫
(I18N-capable-formatting Tag Library) fmt https://www.doczj.com/doc/f25314476.html,/jsp/jstl/fmt Date> SQL標籤庫(SQL Tag Library) sql https://www.doczj.com/doc/f25314476.html,/jsp/jstl/sql > XML標籤庫(XML Tag Library) xml https://www.doczj.com/doc/f25314476.html,/jsp/jstl/xml > 函式標籤庫 (Functions Tag Library) fn https://www.doczj.com/doc/f25314476.html,/jsp/jstl/functions ?安裝JSTL1.1 JSTL官方網站為https://www.doczj.com/doc/f25314476.html,/products/jsp/jstl/ 必須在支援Servlet 2.4及JSP2.0以上版本的Container使用。 下載網址:https://www.doczj.com/doc/f25314476.html,/taglibs/index.html 解壓縮目錄下之子目錄\standard\javadoc中即API套件說明文件。 將子目錄\standard\lib下之jstl.jar及standard.jar檔複製到伺服器站台下WEB-INF\lib中,或放在伺服器的共用程式資料夾(如Tomcat的\commom\lib), 即可在JSP中使用JSTL。 將子目錄\standard\tld下之tld檔複製到WEB-INF目錄下以便日後使用。 將子目錄\standard下的standard-examples.war檔案複製到伺服器路徑下(如Tomcat的webapps),會自動部署standard-examples站台,可在該站台下瀏覽 JSTL範例程式檔案。 核心標籤庫(Core Tag Library) ?核心標籤庫主要功能如下 功能分類標籤名稱 運算式操作out, set, remove, catch 流程控制if, choose…when…otherwise 迭代操作forEach, forTokens URL操作import, url, redirect 使用核心標籤庫時使用<%@tablib %>指令,並設定prefix和uri值如下<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%> 運算式操作(General Expression Tags) ? Syntax 1: with body Syntax 2: without body Default value 屬性說明 名稱說明EL 型態是否必須預設值value 要被顯示出來的值Y Object 是無default 預設值Y Object 否無escapeXml 是否轉換特殊字元如:<轉為<Y boolean否Yes value所定義的值除了一般字串外,可作簡單的數值計算,如value=”${3+5}”; 亦可為表單所傳過來的參數,例如value=”${param.data}”會將標單中參數data 的值顯示出來。 假如value為空值時,會顯示default所定義的值;若沒有設定default值時則會顯示一個空字串。 如escapeXml屬性不為false時, 字元< > ‘ “ & " & Entity < > ' ? Syntax 1: 將value的值儲存到範圍為scope的varName變數中 Syntax 2: 將本體內容的資料儲存至範圍為scope的varName變數之中 Syntax 3: 將value的值儲存至target物件的屬性中 Syntax 4: 將本體內容的資料儲存至target物件的屬性之中 ……statement body 屬性說明 名稱說明EL 型態是否必須預設值value 要被儲存的值Y Object否無 var 欲存入的變數名稱N String否無 scope var變數的JSP範圍N String否page target 為一JavaBean或java.util.Map物件Y Object否無property 指定target物件的屬性Y String否無 ? Syntax: 名稱說明EL 型態是否必須預設值var 欲移除的變數名稱N String是無 scope var變數的JSP範圍N String否page scope屬性可有可無,但若不設定scope,則會刪除所有範圍中(Page, Request, Session, Application)被var定義的名稱所有資料。 ? Syntax: ……欲擷取之錯誤部份 屬性說明 名稱說明EL 型態是否必須預設值var 儲存錯誤訊息的變數名稱N String無無 當錯誤發生在 ?Example: JSTLLogin.htm程式檔請輸入資料登入網站
JSTLLogin.jsp程式檔
<%@page contentType="text/html;charset=big5"%>
<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
Working with c:out
The browser is:
escapeXml="false"/> Working with c:set and c:remove ${3+5} pageScope.number: sessionScope.number: applicationScope.number: Working with c:catch for Error Message
requestScope.number:
Integer.parseInt(eFormat) ; %>
${err_Message}
流程控制(Conditional Tags)
?
[scope=”{page|request|session|application}”]/> Syntax 2: with body 屬性說明 名稱 說明 EL 型態 是否必須 預設值 test 如果運算式的結果為true 則執行本體內容,false 則相反 Y boolean 是 無 var 儲存test 運算後的結果,即true 或false N String 無 無 scope var 變數的JSP 範圍 N String 否 page 一般testCondition 運算式用來比對表單傳來的資訊,例如 ${https://www.doczj.com/doc/f25314476.html,er==’admin’},如果筆對正確,則varName 傳回true ;否則傳回false 。 ? 用法如同if…then…else一般。 Syntax: …… 屬性說明 名稱說明EL 型態是否必須預設值test 如果運算式的結果為true則執行本 Y boolean是無體內容,false則相反 ?Example JSTLCondition.htm程式碼
JSTLCondition.jsp程式碼
<%@page contentType="text/html;charset=big5"%>
<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
執行結果: ${condition}
迭代操作(Iterator Tags)
?
Syntax 1: 迭代一集合物件之所有成員
……Statement Body
Syntax 2: 迭代指定的次數
……Statement Body
屬性
名稱說明EL 型態是否必須預設值
var 存放現在指到的成員N String 否無
items 被迭代的的集合物件Y Array, Collection,
否無
Iterator, String,
Enumeration, Map
varStatus 存放現在指到的相關
N String 否無
成員資訊
begin 開始的位置Y int 否0
end 結束的位置Y int 否最後一個成員step 每次迭代的間隔數Y int 否 1 有begin屬性時,begin必須大於等於0;有end屬性時,必須大於begin;有step屬性時,step必須大於等於1。
如果需要在循序瀏覽一個集合物件時將內容印出來,就必須有items屬性,否則表示空集合(即items視為null);當begin大於或等於items大小時則迭代不
算。
?
Syntax:
屬性
名稱說明EL 型態是否必須預設值
var 存放現在指到的成員N String 否無
items 被迭代的的集合物件Y Array, Collection,
是無
Iterator, String,
Enumeration, Map
delims 定義分割字串的字元N String 是無varStatus 存放現在指到的相關
N String 否無
成員資訊
begin 開始的位置Y int 否0
end 結束的位置Y int 否最後一個成員step 每次迭代的間隔數Y int 否 1 有begin屬性時,begin必須大於等於0;有end屬性時,必須大於begin;有step屬性時,step必須大於等於1。
如果需要在循序瀏覽一個集合物件時將內容印出來,就必須有items屬性,否則表示空集合(即items視為null);當begin大於或等於items大小時則迭代不
算。
?Example: JSTLIterate.jsp
<%@page contentType="text/html;charset=Big5"%>
<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
<%
String str[] = new String[5] ;
str[0] = "Hello" ;
str[1] = "Hellen" ;
str[2] = "Heath" ;
str[3] = "Wealth" ;
str[4] = "Knowledge" ;
;
request.setAttribute("atts",str)
%>
Omit begin, end, step
${item}
Use begin, end, step
${item}
Use begin, end, step without items
${item}
Consider varStatus
index: ${s.index} |
count: ${s.count} |
first: ${s.first} |
${https://www.doczj.com/doc/f25314476.html,st}
last:
After delimition:
${item}
URL操作(Import Tags)
?
Syntax 1: 使用String型態存入
[scope=”{page|request|session|application}”] [charEncoding=”charEncoding”]> ……Statement Body
Syntax 2: 使用Reader型態存入
……Statement Body
屬性
名稱說明EL 型態是否必須預設值url 欲包含文件之網址Y String 是無
var 儲存備包含的文件內容(以String型態
N String 否無存入)
scope var變數的JSP範圍N String 否Page context 在相同Container下欲包含之網址文件
Y String 否無名稱,其他Web站台必須以/開頭。
charEncoding 被包含文件的編碼格式N String 否無varReader 儲存被包含文件的內容(以Reader型
N String 否無態存入)
url為必要屬性,可以用相對位址寫出網頁檔名,如url=”images/Data.htm”,表示Data.htm網頁在此JSP檔所在目錄底下之images子目錄下;如果該路徑
對應位置為站台之根目錄,則路徑前記得加上/,如url=”/images/Data.htm”
如使用絕對位址,則列出網址,如url=”https://www.doczj.com/doc/f25314476.html,”
如果所欲顯示的文件在同一個伺服器上另一個Web站台上時,必須加上context
屬性,如另一站台名稱為others,則
但此時該站台必須在伺服器文件中被定義過。例如Tomcat的server.xml檔案
中,定義一個名為others的Web站台如下
:
crossContext=”true”/> : 當var屬性存在時,會把欲包含文件之內容以字串型態涵蓋進來存在varName 中,但不輸出在網頁上,且由scope設定其範圍,在需要的時候(例如版權宣 告、歡迎語句等)再以變數型態輸出,如 ? Syntax 1: without statement body [scope=”{page|request|session|application}”]/> Syntax 2: with statement body [scope=”{page|request|session|application}”]> 屬性 名稱說明EL 型態是否必須預設值url 欲執行之網址Y String 是無 var 儲存備包含的文件內容(以String型態 N String 否無存入) scope var變數的JSP範圍N String 否Page context 在相同Container下欲包含之網址文件 Y String 否無名稱,其他Web站台必須以/開頭。 ”> ? Syntax 1: without statement body Syntax 2: with statement body 屬性 名稱 說明 EL 型態 是否必須 預設值 url 欲執行之網址 Y String 是 無 context 在相同Container 下欲包含之網址文件名稱,其他Web 站台必須以/開頭。 Y String 否 無 JSTLURLTest.jsp 程式碼 <%@page contentType="text/html;charset=Big5"%> <%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
Importing......
Following message is imported from JSTLImported.jsp
Following message is set in current page but retrieved from imported page and trasmitted back
${OutputParam}
Click here for redirect page:
JSTLImported.jsp程式碼
<%@page contentType="text/html;charset=Big5"%>
<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
${InputSetData}
JSTLRedirect.jsp程式碼
<%@page contentType="text/html;charset=Big5"%>
<%@taglib prefix="c" uri="https://www.doczj.com/doc/f25314476.html,/jsp/jstl/core"%>
I18N格式標籤庫(I18N-Capable Formatting Tags)
?JSTL中最重要的功能就是國際化格式(i18n)的支援,此功能可以對一個特定的語言請求作出適合的回應,例如台灣的使用者發出請求時,回應繁體的結果。
它使用J2SE的ResourceBundle,根據不同的地區選擇適合的
ResourceBundle。
EL和JSTL 主要内容 ?EL表达式 ?JSTL标签库
1.EL表达式 EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。在JSP页面中使用EL表达式,可以简化对变量和对象的访问。 EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。 EL表达式对运算符支持 使用EL表达式进行算术运算,在EL表达式中支持+、-、*、/、%运算,示例如下: 代码演示:EL表达式算术运算 <%@ page language="java" pageEncoding="UTF-8"%>