一、基本概念:
1.標籤(Tag):
標籤是一種XML元素,通過標籤可以使JSP網頁變得簡潔並且易於維護,還可以方便地實現同一個JSP檔案支援多種語言版本。由於標籤是XML元素,所以它的名稱和屬性都是大小寫敏感的
2.標籤庫(Tag library):
由一系列功能相似、邏輯上互相聯絡的標籤構成的集合稱為標籤庫。
3.標籤庫描述檔案(Tag Library Descriptor):
標籤庫描述檔案是一個XML檔案,這個檔案提供了標籤庫中類和JSP中對標籤引用的映射關係。它是一個設定檔,和web.xml是類似的。
4.標籤處理類(Tag Handle Class):
標籤處理類是一個Java類,這個類繼承了TagSupport或者擴充了SimpleTag介面,通過這個類可以實現自訂JSP標籤的具體功能
二、自訂JSP標籤的格式:
1.
<% @ taglib prefix=”someprefix” uri=”/sometaglib” %>
為了使到JSP容器能夠使用標籤庫中的自訂行為,必須滿足以下兩個條件:
1.從一個指定的標籤庫中識別出代表這種自訂行為的標籤
2.找到實現這些自訂行為的具體類
第一個必需條件-找出一個自訂行為屬於那個標籤庫-是由標籤指令的首碼(Taglib Directive's Prefix)屬性完成,所以在同一個頁面中使用相同首碼的元素都屬於這個標籤庫。每個標籤庫都定義了一個預設的首碼,用在標籤庫的文檔中或者頁面中插入自訂標籤。所以,你可以使用除了諸如jsp,jspx,java,servlet,sun,sunw(它們都是在JSP白皮書中指定的保留字)之類的首碼。
uri屬性滿足了以上的第二個要求。為每個自訂行為找到對應的類。這個uri包含了一個字串,容器用它來定位TLD檔案。在TLD檔案中可以找到標籤庫中所有標籤處理類的名稱
2.
<someprefix:sometag key=”somevalue”/>
當web應用程式啟動時,容器從WEB-INF檔案夾的目錄結構的META-INF搜尋所有以.tld結尾的檔案。也就是說它們會定位所有的TLD檔案。對於每個TLD檔案,容器會先擷取標籤庫的URI,然後為每個TLD檔案和對應的URI建立映射關係。
在JSP頁面中,我們僅需通過使用帶有URI屬性值的標籤庫指令來和具體的標籤庫匹配
三、自訂JSP標籤的處理過程:
1.在JSP中引入標籤庫:
2.在JSP中使用標籤庫標籤:
3.Web容器根據第二個步驟中的prefix,獲得第一個步驟中聲明的taglib的uri屬性值
4.Web容器根據uri屬性在web.xml找到對應的元素
5.從元素中獲得對應的元素的值
6.Web容器根據元素的值從WEB-INF/目錄下找到對應的.tld檔案
7.從.tld檔案中找到與tagname對應的元素
8.湊元素中獲得對應的元素的值
9.Web容器根據元素的值建立相應的tag handle class的執行個體
10. Web容器調用這個執行個體的doStartTag/doEndTag方法完成相應的處理
四、建立和使用一個Tag Library的基本步驟:
1.建立標籤的處理類(Tag Handler Class)
2.建立標籤庫描述檔案(Tag Library Descrptor File)
3.在web.xml檔案中配置元素
4.在JSP檔案中引人標籤庫
五、TagSupport類簡介:
1.處理標籤的類必須擴充javax.servlet.jsp.TagSupport.
2.TagSupport類的主要屬性:
A.parent屬性:代表嵌套了當前標籤的上層標籤的處理類
B.pageContex屬性:代表Web應用中的javax.servlet.jsp.PageContext對象
3.JSP容器在調用doStartTag或者doEndTag方法前,會先調用setPageContext和setParent方法,設定pageContext和parent。因此在標籤處理類中可以直接存取pageContext變數
4.在TagSupport的構造方法中不能訪問pageContext成員變數,因為此時JSP容器還沒有調用
setPageContext方法對pageContext進行初始化