SlideShare a Scribd company logo
1 of 74
1
7
• 使用 JSTL
學習目標
• 了解何謂 JSTL
• 使用 JSTL 核心標籤庫
• 使用 JSTL 格式標籤庫
• 使用 JSTL XML 標籤庫
• 使用 JSTL 函式標籤庫
2
簡介 JSTL
• 核心標籤庫
• I18N 相容格式標籤庫
• SQL 標籤庫
• XML 標籤庫
• 函式標籤庫
3
簡介 JSTL
• JSTL
– www.oracle.com/technetwork/java/index-jsp-
135995.html
– tomcat.apache.org/download-taglibs.cgi
• API 文件說明
– tomcat.apache.org/taglibs/standard/apidocs/
4
簡介 JSTL
• taglib 指示元素定義前置名稱與 uri
– 使用核心標籤庫
5
流程處理標籤
6
7
8
9
流程處理標籤
• <c:forEach> 標籤的 items 屬性
– 可以是陣列、Collection、Iterator、
Enumeration、Map 與字串
• 如果 items 指定的是 Map,則設定給 var
的物件會是 Map.Entry
– getKey()與 getValue()方法
10
流程處理標籤
• 如果 items 指定的是字串
11
錯誤處理標籤
12
網頁匯入標籤
• include 指示元素是轉譯時期含括
• <jsp:include> 是執行時期動態含括
13
網頁匯入標籤
• <c:import> 標籤
• 還可以匯入非目前 Web 應用程式中的網頁
14
重新導向標籤
• 不用撰寫 Scriptlet 來使用 sendRedirect()
15
URI 重寫標籤
• 如果不想使用 Scriptlet 撰寫 response 的
encodeURL()方法來作 URI 重寫
16
URI 重寫標籤
• 如果需要在 URI 攜帶參數
17
屬性處理標籤
18
屬性處理標籤
• <c:set> 標籤也可以將 value 的設定改為本體的
方式
• 不設定 scope 時,則會以 page、request、
session、application 的範圍尋找屬性名稱
• 所有範圍都沒有找到屬性名稱,則會在 page 範圍
中新增屬性
19
屬性處理標籤
• 移除某個屬性,可以使用 <c:remove> 標籤
20
屬性處理標籤
• <c:set> 可以用來設定 JavaBean 的屬性或
是 Map 物件的鍵/值,必須使用 target 屬
性進行設定
– 若 ${user} 運算出來的結果是個 JavaBean,
則上例就如同呼叫 setName() 並將請求參數
name 的值傳入
– 若 ${user} 運算出來的結果是個 Map,則上例
就是以 property 屬性作為鍵,而 value 屬性
作為值來呼叫 Map 物件的 put() 方法
21
22
輸出標籤
• 會自動將角括號、單引號、雙引號等字元用
替代字元取代
• 由 <c:out> 的 escapeXml 屬性來控制,
預設是 true
23
輸出標籤
24
I18N 相容格式標籤庫
• 應用程式根據不同國家的使用者,呈現不同
的語言、數字格式、日期格式等,這稱之為
本地化(Localization)
• 根據不同的使用者直接採用不同的語言、數
字格式、日期格式等,這樣的設計考量稱為
國際化(internationalization),簡稱 i18n
25
I18N 基礎
26
I18N基礎
• 如果你的文字編譯器是使用 UTF-8 編碼
27
I18N 基礎
• messages.properties
28
I18N 基礎
• 地區(Locale)資訊
• 資源包(Resource bundle)
• 基礎名稱(Base name)
29
地區(Locale)資訊
• 代表了特定的地理、政治或文化區
• 可由一個語言編碥(Language code)與可選的地區
編碼(Country code)來指定
• 語言編碼是 ISO-639 定義
– 例如 "fr" 表示法文(French),"zh" 表示中文(Chinese)
• 地區編碼則定義在 ISO-3166
– 例如 IT 表示義大利(Italy)、TW 表示台灣(Taiwan)
30
地區(Locale)資訊
• 地區(Locale)資訊的對應類別 Locale
31
資源包(Resource bundle)
• 包括了特定地區的相關資訊
• ResourceBundle 物件,就是 JVM 資源包
的代表物件
32
基礎名稱(Base name)
• 代表同一組訊息但不同地區的各個資源包共
用相同的基礎名稱
• 使用 ResourceBundle 的 getBundle()
時指定的名稱,就是在指定基礎名稱
– 若指定 "messages",預設的 Locale 代表 zh_TW,
會嘗試取得 messages_zh_TW.properties檔案中的
訊息
– 若找不到,再嘗試找 messages.properties 檔案中
的訊息
33
native2ascii
34
ResourceBundle
• ResourceBundle 的 getBundle()可以指
定 Locale 物件
35
訊息標籤
• 慣例上使用 i18n 相容格式標籤庫時,會使用
fmt 作為前置名稱
36
• messages1.properties
37
• messages2.properties
38
39
• messages3.properties
40
地區標籤
• 使用ResourceBundle時如何根據基礎名稱
取得對應的訊息檔案
– 使用指定的Locale物件取得訊息檔案
– 使用Locale.getDefault()取得的物件取得
訊息檔案
– 使用基礎名稱取得訊息檔案
41
地區標籤
• JSTL 的 i18n 相容性標籤決定訊息檔案順序:
– 使用指定的 Locale 物件取得訊息檔案
– 根據瀏覽器 Accept-Language 標頭指定的偏好地
區(Prefered locale)順序,這可以使用
HttpServletRequest的getLocales()取得
– 根據後備地區(fallback locale)資訊取得訊息檔
案
– 使用基礎名稱取得訊息檔案
42
• <fmt:message> 標籤有個 bundle 屬性,
可用以指定 LocalizationContext 物件
地區標籤
43
44
45
地區標籤
• 如果要共用 Locale 資訊,則可以使用
<fmt:setLocale> 標籤
46
地區標籤
• <fmt:setLocale> 會呼叫
HttpServletResponse 的 setLocale() 設定
回應編碼
• <fmt:bundle>、<fmt:setBundle> 或
<fmt:message> 也會呼叫
HttpServletResponse 的 setLocale() 設定
回應編碼
• 在 Servlet 規範中,如果使用了
setCharacterEncoding()或
setContentType() 時指定了 charset,則
setLocale() 就會被忽略
47
地區標籤
• <fmt:requestEncoding> 用來設定請求
物件的編碼處理
• 會呼叫 HttpServletRequest 的
setCharacterEncoding()
• 必須在取得任何請求參數之前使用
48
格式標籤
• 針對數字、日期與時間,搭配地區設定或指
定的格式進行格式化
• 也可以進行數字、日期與時間的剖析
49
50
51
52
53
XPath 路徑表示
• 尋找 XML 文件中特定資訊的語言
• 使用路徑表示來定義 XML 文件中的特定位
置,以取得想要的資訊
• JSTL 搭配 XPath 路徑表示來進行相關操作
54
常用 XPath 路徑表示
55
56
57
XSTL 基礎
• XSL 轉換(T 就是指 Transformation)
• 將 XML 文件轉換為另一份 XML 文件、
HTML 或XHTML 的語言
58
59
60
XML 標籤庫
• 使用 JSTL 的 XML 標籤庫
61
剖析 XML 文件
62
取得 XML 資訊輸出
63
取得 XML 資訊設定
• <x:set> 預設將取得的結果儲存至 page 屬
性範圍
• 可以使用 scope 來指定為其它屬性範圍
64
流程處理標籤
65
66
文件轉換標籤
• 已經定義好 XSLT 文件,則可以使用
<x:transform>、<x:param> 直接進行
XML 文件轉換
67
bookmarksTable.xsl
68
bookmarksBulletin.xsl
69
70
函式標籤庫
71
72
函式標籤庫
• 改變字串大小寫:toLowerCase、toUpperCase
• 取得子字串:substring、substringAfter、
substringBefore
• 裁剪字串前後空白:trim
• 字串取代:replace
• 檢查是否包括子字串:startsWith、endsWith、
contains、containsIgnoreCase
• 檢查子字串位置:indexOf
• 切割字串為字串陣列:split
• 連接字串陣列為字串:join
• 替換 XML 字元:escapeXML
73
綜合練習/微網誌
• register.jsp、member.jsp 與 user.jsp 頁面中的
呈現邏輯,還是使用 Scriptlet 來實作。在這
一節的綜合練習中,將使用 JSTL 來取代
Scriptlet
74

More Related Content

What's hot

What's hot (20)

Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
 
CH09:Collection與Map
CH09:Collection與MapCH09:Collection與Map
CH09:Collection與Map
 
2. 型態、變數與運算子
2. 型態、變數與運算子2. 型態、變數與運算子
2. 型態、變數與運算子
 
使用者認證
使用者認證使用者認證
使用者認證
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
中正大學/FHIR 快速掃描 R4 版本
中正大學/FHIR 快速掃描 R4 版本中正大學/FHIR 快速掃描 R4 版本
中正大學/FHIR 快速掃描 R4 版本
 
How to migrate from Alfresco Search Services to Alfresco SearchEnterprise
How to migrate from Alfresco Search Services to Alfresco SearchEnterpriseHow to migrate from Alfresco Search Services to Alfresco SearchEnterprise
How to migrate from Alfresco Search Services to Alfresco SearchEnterprise
 
Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content Repositories
 
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
 
CH02:從JDK到IDE
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDE
 
Discovering the 2 in Alfresco Search Services 2.0
Discovering the 2 in Alfresco Search Services 2.0Discovering the 2 in Alfresco Search Services 2.0
Discovering the 2 in Alfresco Search Services 2.0
 
CH04:認識物件
CH04:認識物件CH04:認識物件
CH04:認識物件
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
What is new in Apache Hive 3.0?
What is new in Apache Hive 3.0?What is new in Apache Hive 3.0?
What is new in Apache Hive 3.0?
 
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 SpringSpring 2.0 技術手冊第六章 - Hibernate 與 Spring
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
 
Practical Kerberos with Apache HBase
Practical Kerberos with Apache HBasePractical Kerberos with Apache HBase
Practical Kerberos with Apache HBase
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 

Similar to Ch07 使用 JSTL

[圣思园][Java SE]Io 1
[圣思园][Java SE]Io 1[圣思园][Java SE]Io 1
[圣思园][Java SE]Io 1
ArBing Xie
 
搜索技术分享
搜索技术分享搜索技术分享
搜索技术分享
endless_yy
 
[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5
ArBing Xie
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总
yiditushe
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
 

Similar to Ch07 使用 JSTL (20)

Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
 
Ch07 使用JSTL
Ch07 使用JSTL Ch07 使用JSTL
Ch07 使用JSTL
 
[圣思园][Java SE]Io 1
[圣思园][Java SE]Io 1[圣思园][Java SE]Io 1
[圣思园][Java SE]Io 1
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
 
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
 
搜索技术分享
搜索技术分享搜索技术分享
搜索技术分享
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
 
認識物件
認識物件認識物件
認識物件
 
Lucene实践
Lucene实践Lucene实践
Lucene实践
 
喬叔 Elasticsearch Index 管理技巧與效能優化
喬叔 Elasticsearch Index 管理技巧與效能優化喬叔 Elasticsearch Index 管理技巧與效能優化
喬叔 Elasticsearch Index 管理技巧與效能優化
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总
 
Collection與Map
Collection與MapCollection與Map
Collection與Map
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
 
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
 

More from Justin Lin

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
 
Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化
 
CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註CH18:自訂泛型、列舉與標註
CH18:自訂泛型、列舉與標註
 

Ch07 使用 JSTL