狠狠撸

狠狠撸Share a Scribd company logo
1
8
? 自訂標籤
學習目標
? 使用Tag File自訂標籤
? 使用Simple Tag自訂標籤
? 使用Tag自訂標籤
2
簡介Tag File
3
簡介Tag File
4
簡介Tag File
? 撰寫一個副檔名為.tag的檔案,把它們放在
WEB-INF/tags底下
5
簡介Tag File
6
簡介Tag File
? Tag File會被容器轉譯為
javax.servlet.jsp.tagext.SimpleT
agSupport的子類別
? 在Tag File中可以使用out、config、
request、response、session、
application、jspContext等隱含物件
? 其中jspContext在轉譯之後,實際上則是
javax.servlet.jsp.JspContext物件
7
簡介Tag File
? Tag File在JSP中,並不是靜態包含
(<%@include>)或動態包含
(<jsp:include>)
? 在Tag File中撰寫Scriplet的話
– 其中的隱含物件其實是轉譯後的.java中doTag()
方法中的區域變數
– 不可能與JSP中的Scriptlet溝通
8
簡介Tag File
9
處理標籤屬性與本體
10
處理標籤屬性與本體
11
處理標籤屬性與本體
12
處理標籤屬性與本體
13
處理標籤屬性與本體
? Tag File的標籤在使用時若有本體,預設是不
允許有Scriptlet的
? tag指示元素的body-content屬性預設就
是scriptless,還可以設定empty或
tagdependent
14
TLD檔案
? 如果要將Tag File包成JAR檔案,那麼有幾個
地方要注意一下:
– *.tag檔案必須放在JAR檔的META-INF/tags資料
夾或子資料夾下。
– 要定義TLD(Tag Library Description)檔案。
– TLD檔案必須放在JAR檔的META-INF/TLDS資
料夾下。
15
16
TLD檔案
17
簡介Simple Tag
18
簡介Simple Tag
19
簡介Simple Tag
20
了解API架構與生命週期
21
了解API架構與生命週期
? 建立自訂標籤處理器實例。
? 呼叫標籤處理器的setJspContext()方法設定
PageContext實例。
? 如果是巢狀標籤中的內層標籤,則還會呼叫標籤處
理器的setParent()方法,並傳入外層標籤處理
器的實例。
? 設定標籤處理器屬性(例如這邊是呼叫IfTag的
setTest()方法來設定)。
? 呼叫標籤處理器的setJspBody()方法設定
JspFragment實例。
? 呼叫標籤處理器的doTag()方法。
? 銷毀標籤處理器實例。
22
了解API架構與生命週期
? 每一次的請求都會建立新的標籤處理器實例,
而在執行doTag()過後就銷毀實例
? Simple Tag的實作中,建議不要有一些耗資
源的動作
23
了解API架構與生命週期
? 如果執行doTag()的過程在某些條件下,必
須中斷接下來頁面的處理或輸出,則可以丟
出SkipPageException
24
處理標籤屬性與本體
25
處理標籤屬性與本體
26
27
處理標籤屬性與本體
28
處理標籤屬性與本體
29
與父標籤溝通
30
與父標籤溝通
31
與父標籤溝通
32
33
34
TLD檔案
? JAR檔案根目錄下放置編譯好的類別(包含
對應套件的資料夾)。
? JAR檔案META-INF資料夾或子資料夾中放置
TLD檔案。
35
簡介Tag
36
簡介Tag
37
簡介Tag
38
了解架構與生命週期
39
了解架構與生命週期
? 嘗試從標籤池(Tag Pool)找到可用的標籤物件,如果找
到就直接使用,如果沒找到就建立新的標籤物件。
? 呼叫標籤處理器的setPageContext()方法設定
PageContext實例。
? 如果是巢狀標籤中的內層標籤,則還會呼叫標籤處理器的
setParent()方法,並傳入外層標籤處理器的實例。
? 設定標籤處理器屬性(例如這邊是呼叫IfTag的
setTest()方法來設定)。
? 呼叫標籤處理器的doStartTag()方法,並依不同的傳回
值決定是否執行本體或呼叫doAfterBody()、
doEndTag()方法(稍後詳述)。
? 將標籤處理器實例置入標籤池中以便再度使用。
40
了解架構與生命週期
? Tag實例是可以重複使用的
? 自訂Tag類別時,要注意物件狀態是否會保
留下來,必要的時候,在doStartTag()方
法中,可以進行狀態重置的動作
? 別以為可以使用release()方法來作狀態重
置,因為release()方法只會在標籤實例真
正被銷毀回收前被呼叫
41
了解架構與生命週期
42
重複執行標籤本體
? 想繼承TagSupport實作<f:forEach>標
籤,該在哪個方法中實作?
? doStartTag()?doEndTag()?
43
44
45
處理本體執行結果
46
處理本體執行結果
47
處理本體執行結果
48
處理本體執行結果
49
與父標籤溝通
50
51
與父標籤溝通
52
53
綜合練習/微網誌
? 在微網誌首頁顯示使用者發佈的最新訊息,
並稍微利用一下自訂標籤,讓頁面的處理更
為精簡且易維護
54

More Related Content

What's hot (20)

PDF
Ch05 Servlet進階API、過濾器與傾聽器
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Justin Lin
?
PPTX
Ch08 自訂標籤
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
PPTX
Ch02 撰寫與設定 Servlet
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Justin Lin
?
PDF
Ch02 撰寫與設定Servlet
Justin Lin
?
PPTX
Ch13 整合 Spring MVC/Security
Justin Lin
?
PPTX
Ch09 整合资料库
Justin Lin
?
PPTX
Ch03 請求與回應
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
?
PPTX
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
?
PPT
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
PPTX
Ch07 使用 JSTL
Justin Lin
?
PDF
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
?
PDF
Ch01 簡介Web應用程式
Justin Lin
?
PPTX
CH1. 簡介 Web 應用程式
Justin Lin
?
PDF
颁贬02:从闯顿碍到滨顿贰
Justin Lin
?
Ch05 Servlet進階API、過濾器與傾聽器
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Justin Lin
?
Ch08 自訂標籤
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 5 章:Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch02 撰寫與設定 Servlet
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 9 章:整合资料库
Justin Lin
?
Ch02 撰寫與設定Servlet
Justin Lin
?
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch09 整合资料库
Justin Lin
?
Ch03 請求與回應
Justin Lin
?
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
Ch07 使用 JSTL
Justin Lin
?
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Justin Lin
?
Ch01 簡介Web應用程式
Justin Lin
?
CH1. 簡介 Web 應用程式
Justin Lin
?
颁贬02:从闯顿碍到滨顿贰
Justin Lin
?

More from Justin Lin (20)

PPTX
Ch14 簡介 Spring Boot
Justin Lin
?
PPTX
Ch12 Spring 起步走
Justin Lin
?
PPTX
Ch11 簡介 JavaMail
Justin Lin
?
PPTX
Ch10 Web 容器安全管理
Justin Lin
?
PPTX
Ch04 會話管理
Justin Lin
?
PDF
14. 進階主題
Justin Lin
?
PDF
13.并行、平行与非同步
Justin Lin
?
PDF
12. 除錯、測試與效能
Justin Lin
?
PDF
11. 常用內建模組
Justin Lin
?
PDF
10. 資料永續與交換
Justin Lin
?
PDF
9. 資料結構
Justin Lin
?
PDF
8. open() 與 io 模組
Justin Lin
?
PDF
7. 例外處理
Justin Lin
?
PDF
6. 類別的繼承
Justin Lin
?
PDF
5. 從模組到類別
Justin Lin
?
PDF
4. 流程語法與函式
Justin Lin
?
PDF
3.型态与运算子
Justin Lin
?
PDF
1. Python起步走
Justin Lin
?
PDF
2. 從 REPL 到 IDE
Justin Lin
?
PDF
Python 3.9 技術手冊目錄
Justin Lin
?
Ch14 簡介 Spring Boot
Justin Lin
?
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Justin Lin
?
Ch04 會話管理
Justin Lin
?
14. 進階主題
Justin Lin
?
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
Justin Lin
?
10. 資料永續與交換
Justin Lin
?
9. 資料結構
Justin Lin
?
8. open() 與 io 模組
Justin Lin
?
7. 例外處理
Justin Lin
?
6. 類別的繼承
Justin Lin
?
5. 從模組到類別
Justin Lin
?
4. 流程語法與函式
Justin Lin
?
3.型态与运算子
Justin Lin
?
1. Python起步走
Justin Lin
?
2. 從 REPL 到 IDE
Justin Lin
?
Python 3.9 技術手冊目錄
Justin Lin
?
Ad

Ch08 自訂標籤