在 JSP 裡,動作(action)是可以產生及存取物件和影響輸出串流的元素。除了標準動作(stardard actions)之外,JSP 1.1 版規格還支援了稱為自訂動作(custom action)的可重複使用模組。自訂動作藉由在 JSP 頁面中使用自訂標籤(custom tag)來呼叫,而自訂標籤的集合就是標籤程式庫。可由自訂動作所完成的工作包含以下的例子:表單處理、存取資料庫和其他像是電子郵件、目錄及流程控制之類的企業服務。在還沒有自訂動作可以使用之前(在尚未規範自訂動作的標準之前),我們需要 JavaBeans 和 scriplet 結合成主要的結構才能完成像這樣的處理。
標籤程式庫有兩種型態的組件:
- 標籤程式庫敘述器(tag library descriptor)檔案
- 標籤處理器(tag handlers)
標籤程式庫敘述器(以下簡稱 TLD)檔案:
TLD 是描述標籤程式庫的 XML 文件,裡面包含了整個資料庫和其中每一個標籤的資訊。TLD 檔案會被 JSP container(JSP 容器)用來檢驗標籤,以及會被 JSP 頁面發展工具來使用。
標籤處理器:
標籤處理器是一個在內含標籤的 JSP 網頁執行時,會由 JSP container 去呼叫來評估自訂標籤的物件。在評估標籤的過程中,JSP 頁面的實作類別會從頁面中的不同部份去呼叫標籤處理器的方法。
當遇到自訂標籤的起始標籤時,JSP 頁面實作類別會呼叫方法來初始化適合的處理器並執行處理器中的
doStartTag 方法。當遇到自訂標籤的結尾標籤時會執行處理器的
doEndTag 方法。當標籤處理器需要和標籤內的主體互動時,則會在這之間呼叫其他額外的方法。為了要提供標籤處理器的完整功能,你必須要實作在處理標籤的不同時期裡內會呼叫的方法。
標籤處理器有允許它去與 JSP 頁面溝通的 API,而 API 的進入點是
PageContext 物件。透過它,標籤處理器能夠使用所有其他可從 JSP 頁面上存取的隱含物件(
request,
session,
application)。隱含物件可以擁有屬性,而存取屬性則是使用
setAttribute /
getAttribute 方法。如果標籤是巢狀的話,那麼標籤處理器也可以存取與框住它的處理器(呼叫 parent,譯註:
getParent /
setParent 方法)。標籤處理器必須實作
Tag 或
BodyTag 介面。你也可以繼承
TagSupport 或
BodyTagSupport 類別,它們已經實作了前述的介面,因此你只需覆寫你想要的方法就可以自訂自己的處理器了。