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