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

Contenu connexe

Tendances

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
 

Tendances (20)

Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
 
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
 
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch01 簡介Web應用程式
Ch01 簡介Web應用程式Ch01 簡介Web應用程式
Ch01 簡介Web應用程式
 
Ch10 Web容器安全管理
Ch10 Web容器安全管理 Ch10 Web容器安全管理
Ch10 Web容器安全管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPServlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
 
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 

Similaire à Ch07 使用JSTL

2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
Anthony Chen
 
Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)
liqiang xu
 
Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)
bwgang
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
yiditushe
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
yiditushe
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿
yiditushe
 
腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析
George Ang
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
yiditushe
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
yiditushe
 
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbc
Meng He
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
yiditushe
 

Similaire à Ch07 使用JSTL (20)

2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)
 
Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)Selenium私房菜(新手入门教程)
Selenium私房菜(新手入门教程)
 
Lucene实践
Lucene实践Lucene实践
Lucene实践
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
 
Mysql 培训-优化篇
Mysql 培训-优化篇Mysql 培训-优化篇
Mysql 培训-优化篇
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
Elastic Stack 最新动态
Elastic Stack 最新动态Elastic Stack 最新动态
Elastic Stack 最新动态
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿
 
elastic search分析与实践
elastic search分析与实践elastic search分析与实践
elastic search分析与实践
 
腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析
 
Elasticsearch search engine_development_tips
Elasticsearch search engine_development_tipsElasticsearch search engine_development_tips
Elasticsearch search engine_development_tips
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
 
Internet Explorer相容性設計考量
Internet Explorer相容性設計考量Internet Explorer相容性設計考量
Internet Explorer相容性設計考量
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
03.wls depoly jdbc
03.wls depoly jdbc03.wls depoly jdbc
03.wls depoly jdbc
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 

Plus de Justin Lin

Plus de Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
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 技術手冊目錄
 

Ch07 使用JSTL