自定義標(biāo)簽體系結(jié)構(gòu)介紹
標(biāo)簽處理程序
在創(chuàng)建自定義標(biāo)簽之前,需要?jiǎng)?chuàng)建一個(gè) 標(biāo)簽處理程序。標(biāo)簽處理程序是一個(gè)執(zhí)行自定義標(biāo)簽操作的 Java 對(duì)象。在使用自定義標(biāo)簽時(shí),要導(dǎo)入一個(gè) 標(biāo)簽庫(kù) —— 即一組標(biāo)簽/標(biāo)簽處理程序?qū)ΑMㄟ^(guò)在 Web 部署描述符中聲明庫(kù)導(dǎo)入它,然后用指令 taglib 將它導(dǎo)入 JSP 頁(yè)。
如果 JSP 容器在轉(zhuǎn)換時(shí)遇到了自定義標(biāo)簽,那么它就檢查 標(biāo)簽庫(kù)描述符(tag library descriptor) (TLD) 文件以查詢相應(yīng)的標(biāo)簽處理程序。TLD 文件對(duì)于自定義標(biāo)簽處理程序,就像 Web 部署描述符對(duì)于 servlet 一樣。
在運(yùn)行時(shí),JSP 頁(yè)生成的 servlet 得到對(duì)應(yīng)于這一頁(yè)面所使用的標(biāo)簽的標(biāo)簽處理程序的一個(gè)實(shí)例。生成的 servlet 用傳遞給它的屬性初始化標(biāo)簽處理程序。
標(biāo)簽處理程序?qū)崿F(xiàn)了 生存周期 方法。生成的 servlet 用這些方法通知標(biāo)簽處理程序應(yīng)當(dāng)啟動(dòng)、停止或者重復(fù)自定義標(biāo)簽操作。生成的 servlet 調(diào)用這些生存周期方法執(zhí)行標(biāo)簽的功能。
標(biāo)簽的類型
可以定義兩種類型的標(biāo)簽:
javax.servlet.jsp.tagext.Tag
javax.servlet.jsp.tagext.BodyTag
對(duì) 正文 進(jìn)行操作 —— 即對(duì)在開(kāi)始和結(jié)束標(biāo)簽之間的內(nèi)容進(jìn)行操作的 —— 標(biāo)簽必須實(shí)現(xiàn) BodyTag 接口。在這個(gè)教程中,我們將稱這些標(biāo)簽為 正文標(biāo)簽。我們將不對(duì)其正文操作的標(biāo)簽稱為 簡(jiǎn)單標(biāo)簽。簡(jiǎn)單標(biāo)簽可以實(shí)現(xiàn) Tag 接口,盡管不要求它們這樣做。要記住不對(duì)其正文操作的標(biāo)簽仍然 有 正文,只不過(guò),它的標(biāo)簽處理程序不能讀取這個(gè)正文。