建立一個簡單標籤的步驟:
- 建立實現了
Tag
介面(準確地說是 javax.servlet.jsp.tagext.Tag)的標籤處理常式類。
- 建立一個 TLD 檔案。
- 在標籤處理常式 Java 類中建立屬性。
- 在 TLD 檔案中定義與標籤處理常式 Java 類中定義的屬性對應的屬性。
- 在 TLD 檔案中聲明 scriptlet 變數。
- 實現
doStartTag()
方法。在標籤處理常式類中,根據屬性將值設定到 scriptlet 變數中。
這裡將建立一個簡單標籤處理常式,這個標籤將執行個體化一個 map。使用這個標籤的開發人員可以指定要執行個體化的 map 的類型 ―― HashMap
、TreeMap
、FastHashMap
或者 FastTreeMap
。FastHashMap
和 FastTreeMap
來自 Jakarta Commons Collection library (有關連結請參閱 參考資料)。開發人員還可以指定標籤所在的範圍 ―― 頁、請求、會話還是應用程式範圍。
為了編寫標籤處理常式,必須實現 Tag
介面。如前所述,這個介面用於不操縱其標籤本文的簡單標籤處理常式。
現在,不必直接實現 Tag
介面,相反,用 map 定義的(map-defining)標籤將繼承 TagSupport 類。這個類以有意義的預設方法實現 Tag
介面,因而使開發自訂標籤更容易 (有關 TagSupport 的 API 文檔的連結請參閱 參考資料)。
在預設情況下,TagSupport 實現了 doStartTag()
以使它返回 SKIP_BODY
常量,表示將不對標籤本文進行判斷。 此外,在預設情況下,doEndTag()
方法返回 EVAL_PAGE
,它表示 JSP 運行時引擎應當對頁面的其餘部分進行判斷。 最後,TagSupport 實現了 release()
,它設定 pageContext
及其父元素為 null
。
定義了標籤處理常式後,現在需要增加從處理常式到 TLD 檔案中的標籤的映射。
TLD 檔案對自訂標籤處理常式的作用就像 Web 部署描述符對 servlet 的作用。 TLD 檔案列出了從標籤名到標籤處理常式的映射。 這個檔案中的大多數資料都是在 JSP 頁轉換時使用的。 TLD 檔案通常儲存在 Web 應用程式的 WEB-INF
目錄,並在 web.xml 檔案中聲明。它們一般用 .tld
副檔名結束。
TLD 檔案有一個 導言(preamble),在這裡標識 JSP 技術的版本和使用的標籤庫。這個導言通常看起來像這樣:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>map</short-name>
讓我們更詳細地分析一下這些標籤:
- TLD 檔案的根項目是
taglib
。taglib
描述了一個 標籤庫 ―― 即一組標籤/標籤處理常式對。
- 因為我們使用的是 JSP 版本 1.2,所以在這個例子中需要
tlib-version
和 short-name
元素。
tlib-version
元素對應於標籤庫版本。
jsp-version
對應於標籤庫所依賴的 JSP 技術的版本。
short-name
元素定義了 IDE 和其他開發工具可以使用的標籤庫的簡單名。
taglib
元素包含許多 tag
元素,標籤庫中每一個標籤有一個 tag
元素。
待續...