javaserver pages standard tag librarysnowlin.cmu.edu.tw/webdev/part_ix_jstl.pdf ·...

46
Web Development Part IX JSP 標準標籤庫-JSTL i 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

Upload: others

Post on 07-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • Web Development Part IX JSP 標準標籤庫-JSTL i

    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

  • Web Development Part IX JSP 標準標籤庫-JSTL 1

    JSTL 簡介

    JavaServer Pages Standard Tag Library (1.1) – JSP 標準標籤函式庫,應用於基本輸出、輸入、流程控制、迴圈、XML 文件剖析、資料庫查詢及國際化文字格式標準化(UTF)等。主要分為以下五大類

    JSTL Prefix URI Example 核心標籤庫 (Core Tag Library)

    c http://java.sun.com/jsp/jstl/core

    I18N 格式標籤庫(I18N-capable-formatting Tag Library)

    fmt http://java.sun.com/jsp/jstl/fmt

    SQL 標籤庫 (SQL Tag Library)

    sql http://java.sun.com/jsp/jstl/sql

    XML 標籤庫 (XML Tag Library)

    xml http://java.sun.com/jsp/jstl/xml

    函式標籤庫 (Functions Tag Library)

    fn http://java.sun.com/jsp/jstl/functions

    安裝 JSTL1.1 JSTL 官方網站為 http://java.sun.com/products/jsp/jstl/ 必須在支援 Servlet 2.4 及 JSP2.0 以上版本的 Container 使用。 下載網址:http://jakarta.apache.org/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

  • Web Development Part IX JSP 標準標籤庫-JSTL 2

    URL 操作 import, url, redirect 使用核心標籤庫時使用指令,並設定 prefix 和 uri 值如下

    運算式操作(General Expression Tags)

    - 顯示資料的內容

    Syntax 1: with body

    Syntax 2: without body

    Default value

    屬性說明 名稱 說明 EL 型態 是否必須 預設值 value 要被顯示出來的值 Y Object 是 無 default 預設值 Y Object 否 無 escapeXml 是否轉換特殊字元如: ‘ “ &

    Entity < > ' " &

    - 將變數儲存至 JSP 範圍中或 JavaBean 的屬性中 Syntax 1: 將 value 的值儲存到範圍為 scope 的 varName 變數中

    Syntax 2: 將本體內容的資料儲存至範圍為 scope 的 varName 變數之中

    ……statement body

    Syntax 3: 將 value 的值儲存至 target 物件的屬性中

  • Web Development Part IX JSP 標準標籤庫-JSTL 3

    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 程式檔

    JSTL 登入表單

    請輸入資料登入網站

  • Web Development Part IX JSP 標準標籤庫-JSTL 4

    使用者名稱:


    使用者密碼:

    JSTLLogin.jsp 程式檔

    JSTL Test Page

    Working with c:out


    The browser is:





    Working with c:set and c:remove


    ${3+5}


    pageScope.number:

    requestScope.number:

    sessionScope.number:

  • Web Development Part IX JSP 標準標籤庫-JSTL 5

    Data"/>

    applicationScope.number:

    After removing sessionScope.number:


    Working with c:catch for Error Message

    ${err_Message}

    流程控制(Conditional Tags)

    - 與一般在程式中用的 if 一樣。

    Syntax 1: without body

    Syntax 2: with body

    ……statement body

    屬性說明 名稱 說明 EL 型態 是否必須 預設值 test 如果運算式的結果為 true 則執行本體內

    容,false 則相反 Y boolean 是 無

    var 儲存 test 運算後的結果,即 true 或 false N String 無 無 scope var 變數的 JSP 範圍 N String 否 page

    一般 testCondition 運算式用來比對表單傳來的資訊,例如${param.User==’admin’},如果筆對正確,則 varName 傳回 true;否則傳回

    false。 , , - choose 為 when 和 otherwise 的父標籤,

  • Web Development Part IX JSP 標準標籤庫-JSTL 6

    用法如同 if…then…else 一般。

    Syntax:

    condition1 為 true

    condition2 為 true

    ……

    conditionN 為 true

    前述之 condition 均為 false

    屬性說明 名稱 說明 EL 型態 是否必須 預設值 test 如果運算式的結果為 true 則執行本

    體內容,false 則相反 Y boolean 是 無

    比須在和之間,且在同一個中,則必須在之前。

    Example JSTLCondition.htm 程式碼

    JSTL 登入判斷

    請輸入資料登入網站

    使用者名稱:


    使用者密碼:

    JSTLCondition.jsp 程式碼

  • Web Development Part IX JSP 標準標籤庫-JSTL 7

    JSTL Condition Tag Test Page



    執行結果: ${condition}


    password 1: 1234

    password 2: 5678

    Incorrect Password

    迭代操作(Iterator Tags)

    - 為迴圈控制,將集合(Collection)中的成員循序瀏覽過一遍,當設定條件符合時會持續重覆執行標籤範圍內的本體內容。

    Syntax 1: 迭代一集合物件之所有成員

    ……Statement Body

    Syntax 2: 迭代指定的次數

    ……Statement Body

    屬性 名稱 說明 EL 型態 是否必須 預設值 var 存放現在指到的成員 N String 否 無 items 被迭代的的集合物件 Y Array, Collection,

    Iterator, String,

    Enumeration, Map

    否 無

  • Web Development Part IX JSP 標準標籤庫-JSTL 8

    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 大小時則迭代不算。

    - 用來瀏覽一字串中所有的成員,字串成員由定義符號(delimiters)所分隔。

    Syntax:

    ……Statement Body

    屬性 名稱 說明 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

  • Web Development Part IX JSP 標準標籤庫-JSTL 9

    JSTL Test - forEach tags

    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} |

    last: ${s.last}


    After delimition:

  • Web Development Part IX JSP 標準標籤庫-JSTL 10

    ${item}

    URL 操作(Import Tags)

    - 可以把其他靜態或動態文件包含至本身 JSP 網頁。只能包含和自己同一個 web application 下的文件;而則可以包含不同 web application 或其他網站的文件。

    Syntax 1: 使用 String 型態存入

    ……Statement Body

    Syntax 2: 使用 Reader 型態存入

    ……Statement Body

    屬性 名稱 說明 EL 型態 是否必須 預設值url 欲包含文件之網址 Y String 是 無 var 儲存備包含的文件內容(以 String 型態

    存入) N String 否 無

    scope var 變數的 JSP 範圍 N String 否 Page context 在相同 Container 下欲包含之網址文件

    名稱,其他 Web 站台必須以/開頭。 Y String 否 無

    charEncoding 被包含文件的編碼格式 N String 否 無 varReader 儲存被包含文件的內容(以 Reader 型

    態存入) N String 否 無

    url 為必要屬性,可以用相對位址寫出網頁檔名,如 url=”images/Data.htm”,表示 Data.htm 網頁在此 JSP 檔所在目錄底下之 images 子目錄下;如果該路徑對應位置為站台之根目錄,則路徑前記得加上/,如 url=”/images/Data.htm”

    如使用絕對位址,則列出網址,如 url=”http://java.sun.com” 也支援 FTP 協定,例如要把把某 FTP 站台下的 Data.txt 文件內容顯

    示出來,則為 url=”ftp://ftp.xyz.edu.tw/Data.txt” 如果所欲顯示的文件在同一個伺服器上另一個Web站台上時,必須加上context

  • Web Development Part IX JSP 標準標籤庫-JSTL 11

    屬性,如另一站台名稱為 others,則 但此時該站台必須在伺服器文件中被定義過。例如 Tomcat 的 server.xml 檔案中,定義一個名為 others 的 Web 站台如下 : :

    當 var 屬性存在時,會把欲包含文件之內容以字串型態涵蓋進來存在 varName中,但不輸出在網頁上,且由 scope 設定其範圍,在需要的時候(例如版權宣告、歡迎語句等)再以變數型態輸出,如。

    - 主要是用來產生一個 URL。

    Syntax 1: without statement body

    Syntax 2: with statement body

    標籤變數

    屬性 名稱 說明 EL 型態 是否必須 預設值url 欲執行之網址 Y String 是 無 var 儲存備包含的文件內容(以 String 型態

    存入) N String 否 無

    scope var 變數的 JSP 範圍 N String 否 Page context 在相同 Container 下欲包含之網址文件

    名稱,其他 Web 站台必須以/開頭。 Y String 否 無

    標籤的屬性規則與一樣。一般常搭配…超連結標籤使用;或者直接顯示某站台的影像圖片,如

    - 可以將用戶端的請求從一個 JSP 網頁導向到其他文件,使用此標籤之網頁將不會顯現出來。

    Syntax 1: without statement body

    Syntax 2: with statement body

  • Web Development Part IX JSP 標準標籤庫-JSTL 12

    標籤變數

    屬性 名稱 說明 EL 型態 是否必須 預設值url 欲執行之網址 Y String 是 無 context 在相同 Container 下欲包含之網址文件

    名稱,其他 Web 站台必須以/開頭。 Y String 否 無

    標籤的 url 屬性規則與一樣。 Example:

    JSTLURLTest.jsp 程式碼

    JSTL URL Tags Test

    Importing......

    Following message is imported from JSTLImported.jsp

    Following message is set in current page but retrieved from imported page and

    trasmitted back

    ${OutputParam}

    JSTL Reference Documentation

  • Web Development Part IX JSP 標準標籤庫-JSTL 13

    Click here for redirect page:

    JSTLRedirect.jsp

    JSTLImported.jsp 程式碼

    JSTL Imported Page


    ${InputSetData}


    JSTLRedirect.jsp 程式碼

    JSTL Redirect Page

  • Web Development Part IX JSP 標準標籤庫-JSTL 14

    I18N 格式標籤庫(I18N-Capable Formatting Tags)

    JSTL 中最重要的功能就是國際化格式(i18n)的支援,此功能可以對一個特定的語言請求作出適合的回應,例如台灣的使用者發出請求時,回應繁體的結果。

    它使用 J2SE 的 ResourceBundle,根據不同的地區選擇適合的ResourceBundle。

    用來設置地區,比如

  • Web Development Part IX JSP 標準標籤庫-JSTL 15

    - 設定請求的字串編碼

    Syntax:

    屬性 名稱 說明 EL 型態 是否必須 預設值value 字串編碼 Y String 是 無

    若未設定編碼,則表示交由 JSP 自行決定。 Example:

    JSTL for Local Area Information

    Using fmt:setLocale


    JAPANESE(JAPAN):

    SPANISH:

    FRENCH(CANADA):

    CHINESE(TAIWAN):

    CHINESE(CHINA):

    訊息格式標籤

    此標籤主要的功能為抓取系統設定資源,做到多國化訊息。 建立系統設定資源檔(.properties),例如 MyResource.properties,並將檔案放

    置在 WEB-INF/classes 目錄下,檔案內容格式為 key = value,如:

    str1 = Hello

    str2 = World - 從指定的資源中把特定的關鍵字之值取出

  • Web Development Part IX JSP 標準標籤庫-JSTL 16

    Syntax 1: without param tags

    Syntax 2: with param tags

    標籤

    Syntax 3: with statement body including key and param tags

    key = ...... 索引鍵

    (標籤)

    屬性 名稱 說明 EL 型態 是否必須 預設值 key 索引鍵 Y String 否 無 bundle 指定使用的資料來源 Y LocalizationContext 否 無 var 儲存國際化訊息 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    假如沒有設定 key 屬性,會自動從本體內容中尋找關鍵字,再找出對應的結果顯示在網頁中。如設定 key 屬性,則可配合前述之 properties資源檔案指定對應的值,如 key=”str1”,則字串 Hello 會顯示在網頁上。

    如果有 var 屬性時,會把資料儲存在 varName 中而不會顯示在網頁上,如要顯示則必須搭配標籤使用。

    - 為資料來源中抓取之資料動態設定參數,如日期、使用者名稱等。 Syntax 1: 經由 value 屬性設定參數值

    Syntax 2: 經由本體內容設定參數值

    ……Statement Body

    屬性 名稱 說明 EL 型態 是否必須 預設值value 增加的變數 Y String 是 無

  • Web Development Part IX JSP 標準標籤庫-JSTL 17

    如果沒有 value 屬性,就會預設去抓取本體內容作為要給予的參數。 若要顯示中文字時,在資源檔(.properties)中的中文部份必須為 Unicode,否則

    將無法顯示出來。 - 設定本體內容的資料來源。

    Syntax:

    ……Statement Body (如)

    屬性 名稱 說明 EL 型態 是否必須 預設值basename 要使用的資源名稱,如.properties 檔名 Y String 是 無 prefix 前置關鍵字 Y String 否 無

    basename 的值不可以有任何檔案類型(即不可有.class, .properties 等副檔名) 假如資源檔(.properties)中的 key 名稱有共同的前置字串,則可以 prefix 設定。

    例如以下之資源檔內容

    requestinfo.label.method = Method:

    requestinfo.label.protocol = Protocol:

    則可定義 prefix=”requestinfo.lable.”,而對應之索引 key 值可簡化如

    - 設定預設的資料來源,或設定到屬性範圍中。

    Syntax:

    屬性 名稱 說明 EL 型態 是否必須 預設值basename 要使用的資源名稱,如.properties 檔名 Y String 是 無 var 儲存資源名稱 Y String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    basename 設定要使用的資料來源,和用法相同。 如果沒有設定 var 時,則設定好的資料來源將會變成預設的資料來源,讓在同

    一網頁或同一屬性範圍中的可直接預設使用此資料來源。例如

    如果設定 var 時,會把此資料來源存入 varName 中,當要使

    用時,必須使用 bundle 這個屬性來指定。例如

  • Web Development Part IX JSP 標準標籤庫-JSTL 18

    一般和都可以搭配使用。以上例而言,當有多種各國語言的資料來源時,可以將檔名取成

    MyResource_zh_TW.properties、MyResource_en.properties 和

    MyResource.propesies 等。例如將區域設定為 zh_TW,則使

    用或時,將會預設讀取

    MyResource_zh_TW.properties 資源檔;如果設定的區域沒有符合的檔名,

    那麼將會使用 MyResource.properties 當作資料來源。

    Example:

    建立資源檔-JSTLi18nResource_en_US.properties

    str=Hi!{0}
    today is {1,date,long}
    time is {2,time,full}
    number is

    {3,number,#.#}

    此資源檔表示索引鍵值 str 會呈現四種動態變數-字串、date、time 及number。

    {0}表示第一個變數位置為一般字串,{1,date,long}表示 date 的顯示格式,除 long 之外,date 亦可顯示為 short、medium、full 等。同理,{2,time,full}

    與{3,number}亦類似。相關規定可參閱 Java J2SDK1.4.2 API 中的java.text.MessageFormat。

    建立資源檔-JSTLi18nResource_zh_TW.properties 原始碼(檔名 JSTLi18n.properties)

    str=中文!{0}
    今天日期為:{1,date,long}
    時間為:{2,time,full}
    數字為:

    {3,number,#.#}

    在 DOS 模式利用 Sun J2SDK 提供的 native2ascii 工具將資源檔中之中文碼轉換成 Unicode native2ascii -encoding Big5

    JSTLi18n.properties

    JSTLi18nResource_zh_TW.properties

    轉碼後(檔名 JSTLi18nResource_zh_TW.properties)

    str=\u4e2d\u6587!{0}
    \u4eca\u5929\u65e5\u671f\u70ba\uff1a{1,date,long}
    \u

    6642\u9593\u70ba\uff1a{2,time,full}
    \u6578\u5b57\u70ba\uff1a{3,number,#.#}

    環境設定 將上述兩個資源檔放置在站台下 WEB-INF\classes 目錄下 至網際網路選項選單內選取”一般”頁籤下的”語言”選項,新增兩種語言-

    中文(台灣)[zh-tw]與英文(美國)[en-us],系統會視排在第一位者之語系選取資源檔。

    程式檔-JSTLi18nInfo.jsp

  • Web Development Part IX JSP 標準標籤庫-JSTL 19

    JSTL for i18n Information

    Using fmt:bundle, message, param


    數字日期格式化標籤

    - 會依據設定的區域將數字改為適當的格式 Syntax 1: 無本體內容

  • Web Development Part IX JSP 標準標籤庫-JSTL 20

    [scope=”{page|request|session|application}”] />

    Syntax 2: 本體內容為欲格式化之數字

    欲格式化之數字

    屬性 名稱 說明 EL 型態 是否必須 預設值value 欲格式化的數字 Y String/Number 否 無 type 指定單位(數字、當地貨幣

    或百分比) Y String 否 number

    pattern 格式化數字的樣式 Y String 否 無 currencyCode ISO-4217 貨幣碼 Y String 否 無 currencySymbol 貨幣符號 Y String 否 無 groupingUsed 是否用逗號區隔數字 Y boolean 否 true maxIntegerDigits 整數部份最大顯示位數 Y int 否 無 minIntegerDigits 整數部份最小顯示位數 Y int 否 無 maxFractionDigits 小數部份最大顯示位數 Y int 否 無 minFractionDigits 小數部份最小顯示位數 Y int 否 無 var 儲存以格式化之數字 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    依據設定的區域顯示不同的格式化數字,例如 5000000.01 在臺灣為5,000,000.01,法國為 5 000 000,01,德國為 5.000.000,01

    pattern 屬性亦提供了科學記號的功能,例如 2.0512E4 代表 2.0512x104,則

    貨幣碼參考國際標準組織網址,例如台幣為 TWD,美金為 USD http://www.iso.org/iso/en/prods-services/popstds/currencycodeslist.html

    如設定了 maxIntegerDigits 或 maxFractionDigits 時,相對於 value 超過的位

  • Web Development Part IX JSP 標準標籤庫-JSTL 21

    數會被刪除。 如設定了 minIntegerDigits 或 minFractionDigits 時,相對於 value 不足的位數

    會以 0 補齊。 - 將字串型態的數字貨幣或百分比轉為數字型態

    Syntax 1: 無本體內容

    Syntax 2: 本體內容為欲轉換之字串

    欲轉換之字串

    屬性 名稱 說明 EL 型態 是否必須 預設值value 欲格式化的字串 Y String/Number 否 無 type 指定單位(數字、當地貨幣

    或百分比) Y String 否 number

    pattern 格式化數字的樣式 Y String 否 無 parseLocale 用來取代預設的地區設定 Y String/java.util.Locale 否 無 integerOnly 是否只顯示整數 Y boolean 否 false Var 儲存以格式化之數字 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    當欲格式化的字串為貨幣金額時,則 type 要選擇 currency,會只輸出金額。 關於 pattern 屬性的設定,可參考 J2SE 的 API 中 java.text.DecimalFormat 類

    別說明。例如輸入字串為 25%,可用 pattern 轉成數字 0.25

    - 格式化日期時間

    Syntax:

  • Web Development Part IX JSP 標準標籤庫-JSTL 22

    [pattern=”customPattern”]

    [dateStyle=”{default|short|medium|long|full}”]

    [timeStyle=”{default|short|medium|long|full}”]

    [timeZone=”timeZone”]

    [var=”varName”]

    [scope=”{page|request|session|application}”] />

    屬性 名稱 說明 EL 型態 是否必須 預設值value 欲格式化的日期時間 Y Java.util.Date 否 無 Type 顯示的部份(日期、時間或

    兩者皆顯示) Y String 否 date

    pattern 格式化日期時間的樣式 Y String 否 無 dateStyle 設定日期部分的顯示方式 Y String 否 defaulttimeStyle 設定時間部分的顯示方式 Y String 否 defaulttimeZone 設定使用的時區 Y String/java.util.TimeZone 否 無 Var 儲存以格式化之數字 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    時間的格式可參考 Java API 文件 java.text.SimpleDateFormat 類別的說明。 - 將字串型態的時間或日期都轉為日期時間型態

    Syntax 1: 無本體內容

    Syntax 2: 本體內容為欲轉換之字串

  • Web Development Part IX JSP 標準標籤庫-JSTL 23

    欲轉換之日期或時間型態的字串

    屬性 名稱 說明 EL 型態 是否必須 預設值value 欲格式化的日期時間 Y java.util.Date 否 無 Type 顯示的部份(日期、時間或

    兩者皆顯示) Y String 否 date

    pattern 格式化日期時間的樣式 Y String 否 無 dateStyle 設定日期部分的顯示方式 Y String 否 defaulttimeStyle 設定時間部分的顯示方式 Y String 否 defaulttimeZone 設定使用的時區 Y String/java.util.TimeZone 否 無 parseLocale 用來取代預設的地區設定 Y String/java.util.Locale 否 無 var 儲存以格式化之數字 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    - 設定預設時區或是將時區儲存至屬性範圍中

    Syntax:

    屬性 名稱 說明 EL 型態 是否必須 預設值value 使用的時區 Y String/java.util.TimeZone 否 無 Var 儲存設定的時區 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    - 設定暫時的時區

    Syntax:

    屬性 名稱 說明 EL 型態 是否必須 預設值value 使用的時區 Y String/java.util.TimeZone 是 無

    Example: JSTLi18nDataFormat.jsp

    JSTL for i18n Data Format

  • Web Development Part IX JSP 標準標籤庫-JSTL 24


    Using fmt:formatNumber

    ${number}

    Using fmt:parseNumber

    ${money}

    Using fmt:formatDate - PST timezone

    ${today}

    Using fmt:parseDate

  • Web Development Part IX JSP 標準標籤庫-JSTL 25

    SQL 標籤庫(SQL Tags)

    JSTL 中提供與資料庫有關的標籤來查詢或修改資料庫內容,等於是在 MVC 架構的顯示層中直接存取資料庫,但並無 ConnectionPool 的功能,較適合小型的網站。其主要的功能如下:

    功能分類 標籤名稱 設定資料庫連線 setDataSource SQL 存取指令 query, update, param, dateParam, transaction

    使用核心標籤庫時使用指令,並設定 prefix 和 uri 值如下

    設定資料庫連線

    安裝驅動程式檔-在伺服器共用程式資料夾(以 Tomcat 為例,為 common\lib)配置MySQL 與 Oracle 資料庫 JDBC 連線檔案

    MySQL 目前提供的驅動程式名字為 Connection/J,可從 MySQL 的網站下載(http://dev.mysql.com/downloads/connector/)。以版本 mysql-connector-java-3.1.10為例,將下載的 ZIP 檔解壓縮之後,在資料夾 mysql-connector-java-3.1.10 中可找到 mysql-connector-java-3.1.10-bin.jar 檔,所有驅動程式所需要的類別都在這檔案裡面,將這個檔案放在上述之路徑下。

    在安裝 Oracle Database Server 或是 Client 的時候,安裝程式會一起安裝 Oracle的 JDBC 驅動程式,只要在 Oracle 安裝的目錄下就可以找到 Oracle 的 JDBC 驅動程式,不過也可以在 Oracle 的網站上下載 Oracle 的 JDBC 驅動程式。網址是: http://www.oracle.com/technology/products/oracle9i/index.html 以 Windows 為例,Oracle 的 JDBC 驅動程式為 classes12.jar 的 JAR 檔案,如果Oracle 安裝目錄為 C:\oracle,而 classes12.jar 檔案就放置在C:\oracle\ora92\jdbc\lib 的路徑下,將這個檔案放在上述之路徑下。

    - 設定資料來源 Syntax 1: 直接連線至已存在的資料來源

  • Web Development Part IX JSP 標準標籤庫-JSTL 26

    driver JDBC 驅動程式類別名稱

    Y String 否 無

    url 資料庫的 URL Y String 否 無 user 資料庫使用者名稱 Y String 否 無 password 資料庫使用者密碼 Y String 否 無 var 儲存資料來源 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    主要的資料庫如 Oracle, MySQL 的 JDBC 驅動程式的設定如下 MySQL – driver=”com.mysql.jdbc.Driver” Oracle – driver=”oracle.jdbc.driver.OracleDriver”

    主要的資料庫如 Oracle, MySQL 的 URL 如下 令 MySQL 資料庫名稱為 TEST,連線位址為 localhost:3306,則

    url=”jdbc:mysql://localhost:3306/TEST” 令 Oracle 資料庫名稱為 DBTEST,連線位址為 localhost:1521,則

    url=”jdbc:oracle:thin:@localhost:1521:DBTEST” 令 Oracle 資料庫建立了服務名稱為 dbtest_localhost,則

    url=” jdbc:oracle:oci:@dbtest_localhost” SQL 存取指令

    - 查詢資料庫的資料 Syntax 1: 沒有本體內容

    Syntax 2: 本體內容為查詢指令

    ……SQL Query Statement

    屬性 名稱 說明 EL 型態 是否必須 預設值dataSource 資料來源 Y String/javax.sql.DataSource 否 無 sql SQL 語法 Y String 否 無 maxRows 設定最多可暫存的資

    料筆數 Y String 否 無

    startRows 設定資料第幾筆開始 Y String 否 0

  • Web Development Part IX JSP 標準標籤庫-JSTL 27

    var 儲存資料來源 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    查詢的結果都會儲存在 var 所定義的變數字串中,共有以下五個數性: 屬性名稱 說明 rows 以欄位名稱當作索引的查詢結果 rowByIndex 以數字當作索引的查詢結果 columnNames 欄位名稱 rowCount 查詢到的資料筆數 limitedByMaxRows 取出最大資料筆數的限制

    - 修改資料庫的資料 Syntax 1: 無本體內容

    Syntax 2: 本體內容為 DML 修改指令

    ……SQL Insert, Delete, Update… Statement

    屬性 名稱 說明 EL 型態 是否必須 預設值dataSource 資料來源 Y String/javax.sql.DataSource 否 無 sql SQL 之 DML 語法 Y String 否 無 maxRows 設定最多可暫存的資

    料筆數 Y String 否 無

    startRows 設定資料第幾筆開始 Y String 否 0 var 儲存資料來源 N String 否 無 scope var 變數的 JSP 範圍 N String 否 Page

    Example: JSTLSQLQuery.jsp(使用表格為 Oracle 資料庫 scott/tiger 之 dept 與 emp)

    JSTL: SQL action examples

    SQL Query Example

  • Web Development Part IX JSP 標準標籤庫-JSTL 28

    SELECT * FROM dept

    SELECT * FROM dept

    Rows Count: ${rs.rowCount}

    ${rs.columnNames[0]}

    ${rs.columnNames[1]}

    ${rs.columnNames[2]}

    ${row.deptno}

    ${row.dname}

    ${row.loc}

    SELECT empno, ename, job, hiredate, sal, deptno FROM emp

    SELECT empno, ename, job, hiredate, sal, deptno FROM emp

    Rows Count: ${rs.rowCount}

    ${item}

  • Web Development Part IX JSP 標準標籤庫-JSTL 29

    ${item}

    SQL UPDATE Example

    INSERT INTO dept VALUES (60,'SHIPPING','SAN FRANCISCO')

    INSERT INTO dept VALUES (60,'SHIPPING','SAN FRANCISCO')

    UPDATE dept SET dname='HEADQURTER' WHERE deptno=50

    UPDATE dept SET dname='HEADQURTER' WHERE deptno=50

    DELETE FROM dept WHERE deptno=90

    DELETE FROM dept WHERE deptno=90

    SELECT * FROM dept

    SELECT * FROM dept

    Rows Count: ${rs.rowCount}

    ${item}

    ${row[0]}

    ${row[1]}

    ${row[2]}

  • Web Development Part IX JSP 標準標籤庫-JSTL 30

    與 - 動態設定 SQL 語句變數 Syntax 1: 使用無本體內容之 param

    Syntax 2: 使用有本體內容之 param

    value

    Syntax 3: 使用 dateParam

    屬性 名稱 說明 EL 型態 是否必須 預設值 value Obeject 或 Date 型態之參數

    (視 param 或 dateParam 而定)Y Object/java.util.date 是 無

    type Date 的種類 Y String 否 timestamp Example: 依據上述之查詢語法,使用動態查詢方式為

    :

    SELECT * FROM dept

    WHERE deptno>?

    OR dname=?

    :

    例中之動態變數${param.deptno}與${param.dname}則是從網頁端傳入的參數,JSTL 會依對應之問號(?)出現的先後順序自動將參數分派。

    - 提供存取資料時之交易安全機制

    Syntax:

    or

    屬性

  • Web Development Part IX JSP 標準標籤庫-JSTL 31

    名稱 說明 EL 型態 是否必須 預設值dataSource 資料來源 Y String/javax.sql.DataSource 否 無 isolation 交易互不干擾等級 Y String 否 無

    同一時間查詢、修改資料的動作大量增加時,很容易就會發生資料不一致的問題。例如從某個帳戶轉帳到另一個帳戶,如果扣完錢以後伺服器突然掛掉,那

    麼這筆錢從第一個帳戶扣款,但卻沒有轉到另一個帳戶,此時將會使這筆金錢

    憑空消失。因此 JSTL 提供一些安全機制來保護這些交易的行為。 如果當的本體內容有錯誤發生時,將不會執行任何一個 SQL

    語句,所以可以保障交易機制的安全性。 isolation 屬性主要在設定交易的安全等級,可以預防許多常見的錯誤。JDBC

    支援了四種交易模式,而也提供此四種功能, 互不干擾等級 Dirty Reads? Nonrepeatable Reads? Phantom Reads? read_uncommitted - - - read_committed 預防 - - repeatable_read 預防 預防 - serializable 預防 預防 預防

    實作架構如下

    :

    :

    :

    :

    :

    函式標籤庫(Function Tags)

    函式標籤庫大部分都是用來處理字串用的,主要有 fn:contains() fn:join() fn:startWith() fn:endsWith()

    fn:indexOf() fn:substring() fn:escapeXml() fn:trim()

    fn:toUpperCase() fn:toLowerCase() fn:containsIgnoreCase()

    fn:substringAfter() fn:split() fn:replace() fn:length()

    使用核心標籤庫時使用指令,並設定 prefix 和 uri 值如下

  • Web Development Part IX JSP 標準標籤庫-JSTL 32

    標籤使用方法 -

    判斷字串 substring 是否在字串 string 之中,傳回 boolean

    - 不管大小寫的情況下判斷字串 substring 是否在字串 string 之中,傳回 boolean

    - 將字串 string 轉換為大寫字元,傳回 String

    - 將字串 string 轉換為小寫字元,傳回 String

    - 將字串 inputString 中的某些子字串 beforeString 取代為另一字串 afterString,

    取代後的字串以 String 傳回

    - 回傳字串 substring 在字串 string 中第一次出現的位置,傳回 int

    - 判斷字串 string 是否以 prefix 字串作為開頭,傳回 boolean

    - 判斷字串 string 是否以 suffix 字串作為結尾,傳回 boolean

    - 擷取字串 string 中的某一子字串(從 beginIndex 取到 endIndex),傳回 String

    - 擷取字串 string 中某子字串 substring 之前的字,傳回 String

    - 擷取字串 string 中某子字串 substring 之後的字,傳回 String

    - 將字串 string 以 delimiters 分離成字串陣列,傳回 String[]

    - 去除字串的前後空白,傳回 String

    - 將陣列 array 中全部的元素以指定字串 separator作為結合,回傳結合後的字串,傳回 String

    - 轉換跳脫字元(如)為 Entity 碼(如<、>),傳回 String

    - 回傳一集合物件或字串 input 的數量或字元數,傳回 int

    Example: JSTLFnTest.jsp

  • Web Development Part IX JSP 標準標籤庫-JSTL 33

    JSTL Functions

    \${fn:contains(string, substring)}

    Input String

    Substring

    Result

    ${s1}

    castle

    ${fn:contains(s1, "castle")}

    ${s1}

    CASTLE

    ${fn:contains(s1, "CASTLE")}

    ${s1}

    null

    ${fn:contains(s1, undefined)}

    ${s1}

    empty string

    ${fn:contains(s1, "")}

    null

    castle

  • Web Development Part IX JSP 標準標籤庫-JSTL 34

    ${fn:contains(undefined, "castle")}

    null

    empty string

    ${fn:contains(undefined, "")}

    \${fn:containsIgnoreCase(string, substring)}

    Input String

    Substring

    Result

    ${s1}

    castle

    ${fn:containsIgnoreCase(s1, "castle")}

    ${s1}

    CASTLE

    ${fn:containsIgnoreCase(s1, "CASTLE")}

    ${s1}

    CaStLe

    ${fn:containsIgnoreCase(s1, "CaStLe")}

    ${s1}

    null

    ${fn:containsIgnoreCase(s1, undefined)}

  • Web Development Part IX JSP 標準標籤庫-JSTL 35

    ${s1}

    empty string

    ${fn:containsIgnoreCase(s1, "")}

    null

    castle

    ${fn:containsIgnoreCase(undefined, "castle")}

    null

    empty string

    ${fn:containsIgnoreCase(undefined, "")}

    \${fn:indexOf(string, substring)}

    Input String

    Substring

    Result

    ${s1}

    castle

    ${fn:indexOf(s1, "castle")}

    ${s1}

    cloud

    ${fn:indexOf(s1, "cloud")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 36

    ${s1}

    null

    ${fn:indexOf(s1, undefined)}

    ${s1}

    empty string

    ${fn:indexOf(s1, "")}

    null

    castle

    ${fn:indexOf(undefined, "castle")}

    null

    empty string

    ${fn:indexOf(undefined, "")}

    \${fn:startsWith(string, prefix)}

    Input String

    Substring

    Result

    ${s1}

    castle

    ${fn:startsWith(s1, "castle")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 37

    ${s1}

    There is

    ${fn:startsWith(s1, "There is")}

    ${s1}

    null

    ${fn:startsWith(s1, undefined)}

    ${s1}

    empty string

    ${fn:startsWith(s1, "")}

    null

    castle

    ${fn:startsWith(undefined, "castle")}

    null

    empty string

    ${fn:startsWith(undefined, "")}

    \${fn:endsWith(string, suffix)}

    Input String

    Substring

    Result

  • Web Development Part IX JSP 標準標籤庫-JSTL 38

    ${s1}

    castle

    ${fn:endsWith(s1, "castle")}

    ${s1}

    cloud

    ${fn:endsWith(s1, "cloud")}

    ${s1}

    null

    ${fn:endsWith(s1, undefined)}

    ${s1}

    empty string

    ${fn:endsWith(s1, "")}

    null

    castle

    ${fn:endsWith(undefined, "castle")}

    null

    empty string

    ${fn:endsWith(undefined, "")}

    \${fn:substring(string, beginIndex, endIndex)}

  • Web Development Part IX JSP 標準標籤庫-JSTL 39

    Input String

    beginIndex

    endIndex

    Result

    ${zip}

    6

    -1

    P.O. Box: ${fn:substring(zip, 6, -1)}

    ${s1}

    11

    17

    ${fn:substring(s1, 11, 17)}

    ${s1}

    12

    5

     ${fn:substring(s1, 12, 5)}

    ${s1}

    23

    -1

    ${fn:substring(s1, 23, -1)}

    ${s1}

    23

    999

    ${fn:substring(s1, 23, 999)}

    ${s1}

    -1

  • Web Development Part IX JSP 標準標籤庫-JSTL 40

    -1

    ${fn:substring(s1, -1, -1)}

    ${s1}

    99

    12

     ${fn:substring(s1, 99, 12)}

    empty string

    2

    6

     ${fn:substring("", 2, 6)}

    null

    2

    6

     ${fn:substring(undefined, 2, 6)}

    \${fn:substringAfter(string, substring)}

    Input String

    substring

    Result

    ${zip}

    -

    P.O. Box: ${fn:substringAfter(zip, "-")}

    ${s1}

    There

  • Web Development Part IX JSP 標準標籤庫-JSTL 41

    ${fn:substringAfter(s1, "There")}

    ${s1}

    on a

    ${fn:substringAfter(s1, "on a")}

    ${s1}

    not found

     ${fn:substringAfter(s1, "not found")}

    ${s1}

    null

    ${fn:substringAfter(s1, undefined)}

    ${s1}

    empty string

    ${fn:substringAfter(s1, "")}

    empty string

    castle

     ${fn:substringAfter("", "castle")}

    null

    castle

     ${fn:substringAfter(undefined, "castle")}

    null

    empty string

     ${fn:substringAfter(undefined, "")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 42

    \${fn:substringBefore(string, substring)}

    Input String

    substring

    Result

    ${zip}

    -

    Zip without P.O. Box: ${fn:substringBefore(zip, "-")}

    ${s1}

    on a

    ${fn:substringBefore(s1, "on a")}

    ${s1}

    castle

    ${fn:substringBefore(s1, "castle")}

    ${s1}

    null

     ${fn:substringBefore(s1, undefined)}

    ${s1}

    empty string

     ${fn:substringBefore(s1, "")}

    empty string

    castle

     ${fn:substringBefore("", "castle")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 43

    null

    castle

     ${fn:substringBefore(undefined, "castle")}

    null

    empty string

     ${fn:substringBefore(undefined, "")}

    \${fn:split(string, delimiters)}

    \${fn:join(array, separator)}

    Input Array

    Separator

    Result

    ${s1}

    +

    ${fn:join(a1, " + ")}

    ${s1}

    ${fn:join(a1, " ")}

    ${s1}

    empty string

    ${fn:join(a1, "")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 44

    ${s1}

    null

    ${fn:join(a1, null)}

    null

    empty string

     ${fn:join(null, "")}

    \${fn:escapeXml(string)}

    Input String

    Result

    ${s1}

    ${fn:escapeXml(s1)}

    body of foo

    ${fn:escapeXml("body of foo")}

    null

     ${fn:escapeXml(undefined)}

    empty string

     ${fn:escapeXml("")}

  • Web Development Part IX JSP 標準標籤庫-JSTL 45