Taglib 指令(<%@ taglib %>)引入自定義標籤庫,賦予 JSP 擴展標記語言的能力,是從「腳本頁」邁向「標籤驅動開發」的關鍵一步。
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
<!-- 範例 -->
<%@ taglib uri="https://www.example.com/tags" prefix="my" %>
<my:loop>...</my:loop>
<my:loop>)。<my:loop>body</my:loop>),可巢狀。.tld XML 檔,定義標籤名、處理類、屬性、體內容類型等元資料。WEB-INF/**/*.tld,建立 uri → tld路徑 對應;JSP 中 uri 屬性匹配此映射,無需寫實體路徑。| 屬性 | 必要 | 說明 |
|---|---|---|
| uri | 是 | 標籤庫唯一識別符,可為 URL/URN,容器用以定位 TLD |
| prefix | 是 | 標籤前綴,同一 JSP 內不可重複,保留字:jsp, jspx, java, servlet, sun, sunw |
Tag/IterationTag/BodyTag 或繼承 TagSupport/BodyTagSupport,實作 doStartTag()、doEndTag() 等。WEB-INF/tlds/ 或 JAR META-INF/),定義 <tag> 元素對應處理類與屬性。WEB-INF/**/*.tld)。<%@ taglib uri="..." prefix="..." %> 引入並使用。pageContext、parent 由容器在 doStartTag() 前注入,構造器中不可訪問。SKIP_BODY、EVAL_BODY_INCLUDE、EVAL_BODY_TAG(BodyTag)。findAncestorWithClass() 訪問父標籤上下文。現代框架(Struts2、Spring MVC、JSF)皆大量內建標籤庫,理解 Taglib 機制有助於除錯與擴展。