自定義標簽主要用於移除Jsp頁面中的java代碼。
自定義JSP標簽的執行過程
當一個含有自定義標簽的JSP頁面被JSP引擎(Web容器)轉譯成Servlet時,JSP引擎遇到自定義的標簽,會把這個自定義標簽轉化成對一個稱為“標簽處理類”的調用。之後,當這個JSP頁面被執行時,JSP引擎就會調用這個“標簽處理類”對象,並執行其內部定義的相應操作方法,從而完成相應的功能
自定義JSP標簽的開發流程
使用Java處理類來開發自定義JSP標簽時,主要分為下幾個步驟。
創建標簽的處理類(Tag Handle Class)。這個類實現Tag接口,用來定義標簽的行為,並在JSP引擎遇到自定義標簽時調用執行。
創建標簽庫描述 (tld) 文件(Tag Library Descriptor File),在tld文件中對標簽處理器類進行描述。
在JSP文件中用taglib指令引入標簽庫,然後使用標簽庫描述文件中指定的標簽名來使用它。
Tag接口的執行流程
JSP引擎將遇到自定義標簽時,首先創建標簽處理器類的實例對象,然後按照JSP規范定義的通信規則依次調用它的方法。
1、public void setPageContext(PageContext pc), JSP引擎實例化標簽處理器後,將調用setPageContext方法將JSP頁面的pageContext對象傳遞給標簽處理器,標簽處理器以後可以通過這個pageContext對象與JSP頁面進行通信。
2、public void setParent(Tag t),setPageContext方法執行完後,WEB容器接著調用的setParent方法將當前標簽的父標簽傳遞給當前標簽處理器,如果當前標簽沒有父標簽,則傳遞給setParent方法的參數值為null。
3、public int doStartTag(),調用了setPageContext方法和setParent方法之後,WEB容器執行到自定義標簽的開始標記時,就會調用標簽處理器的doStartTag方法。
4、public int doEndTag(),WEB容器執行完自定義標簽的標簽體後,就會接著去執行自定義標簽的結束標記,此時,WEB容器會去調用標簽處理器的doEndTag方法。
5、public void release(),通常WEB容器執行完自定義標簽後,標簽處理器會駐留在內存中,為其它請求服務器,直至停止web應用時,web容器才會調用release方法。
開發人員在編寫Jsp頁面時,經常還需要在頁面中引入一些邏輯,例如:
控制jsp頁面某一部分內容是否執行。
控制整個jsp頁面是否執行。
控制jsp頁面內容重復執行。
修改jsp頁面內容輸出。
自定義標簽除了可以移除jsp頁面java代碼外,它也可以實現以上功能。
tld文件中的四種標簽體類型
EMPTY JSP scriptless tagdepentend
標簽庫描述符
標簽庫描述符文件是一個以“.tld”結尾的標准XML文檔,用來記錄一個標簽庫內擁有哪些標簽、每個標簽包含哪些屬性。
以下是一個JSP 2.0規范的標簽庫描述文件的內容:
<taglib>元素是標簽庫描述符的根元素,它包含12個子元素,詳細介紹如下。
(1)<description>:標簽庫的一個文本描述。
(2)<tlib-version>:指定標簽庫的版本。
(3)<short-name>:為標簽定義簡短的名字,在taglib指令中可作為首選的前綴名使用。
(4)<uri>:定義一個URI,用於唯一地標識此標簽庫。
(5)<tag>:用於指定自定義標簽的相關信息。
(6)<display-name>:為標簽庫指定一個簡短的別名。
(7)<small-icon>:為標簽庫指定大小為16×16的小圖標(gif或jpeg格式),該圖標可在圖形界面工具中顯示。
(8)<large-icon>:為標簽庫指定大小為32×32的大圖標(gif或jpeg格式),該圖標可在圖形界面工具中顯示。
(9)<validator>:為標簽庫提供一個驗證器。
(10)<listener>:為標簽庫提供一個監聽器。
(11)<tag-file>:用於描述標簽文件。
(12)<function>:用於指定在表達式語言中使用的函數。
TagSupport類的生命周期
BodyTagSupport類的生命周期