1. 程式人生 > >JSP 2的自定義標籤(1)

JSP 2的自定義標籤(1)

一,什麼是自定義標籤?
在JSP規範的1.1版中增加了自定義標籤庫規範,自定義標籤是一種非常優秀的表現層元件技術。通過使用自定義標籤庫,可以在簡單的標籤中封裝複雜的功能。
二,為什麼要使用自定義標籤?
主要是為了取代醜陋的JSP指令碼,在HTML頁面中插入JSP指令碼有如下幾個壞處:
1.JSP指令碼非常醜陋,難以閱讀
2.JSP指令碼和HTML程式碼混雜,維護成本高
3.HTML頁面中嵌入JSP指令碼,導致美工人員難以參與開發。
三,JSP2開發標籤庫的步驟?
這裡寫圖片描述
四,JSP2開發標籤庫的具體步驟如下:
1.開發自定義標籤類
在JSP頁面使用一個簡單的標籤時,底層實際上由標籤處理類提供支援,從而可以通過簡單的標籤來封裝複雜的功能,從而使團隊更好地協作開發(能讓美工人員更好地參與JSP頁面的開發)。
自定義標籤庫類應該繼承哪個父類及哪兩點要求?
繼承一個父類:javax.servlet.jsp.tagext.SimpleTagSupport
要求如下:(1)如果標籤類包含屬性,每個屬性都有對應的getter和setter方法
(2)重寫doTag()方法,這個方法負責生成頁面內容
2.建立TLD檔案
TLD是Tag Library Definition的縮寫,即標籤庫定義,檔案字尾是tld,每個TLD檔案對應一個標籤庫,一個標籤庫中可包含多個標籤。TLD檔案也稱為標籤庫定義檔案。
關於標籤庫檔案的詳細描述:標籤庫自定義檔案的根元素是taglib,它可以包含多個tag多個子元素,每個tag子元素都定義一個標籤。通常可以到Web容器下複製一個標籤庫定義檔案,並在此基礎上進行修改即可。
具體路徑如圖:
這裡寫圖片描述


這裡寫圖片描述
上面的標籤庫定義檔案也是一個標準的XML檔案,該XML檔案的根元素是taglib元素,因此每次編寫標籤庫定義檔案時都直接新增該元素即可。
taglib的三個子元素?
(1)tlib-version:指定該標籤庫實現的版本,這是一個作為標識的內部版本號,對程式沒有太大的作用
(2)short-name:該標籤庫的預設短名,該名稱通常也沒有太大的用處
(3)uri:這個屬性非常重要,它指定該標籤庫的URI,相當於指定該標籤庫的唯一標識。
除此之外,tglib元素下可以包含多個tag元素,每個tag元素定義一個標籤,tag元素下允許出現重用的子元素:
(1)name:該標籤的名稱,這個子元素很重要,JSP頁面中就是根據該名稱來使用此標籤的
(2)tag-class:指定標籤的處理類,毋庸置疑,這個子元素非常重要,它指定了標籤由哪個標籤處理類來處理
(3)body-content:這個子元素也很重要,它指定標籤體內容。該子元素的值可以是如下幾個:
tagdependent:指定標籤處理類自己負責處理標籤體。
empty:指定該標籤只能作為空標籤使用
scriptless:指定該標籤的標籤體可以是靜態HTML元素,表示式語言,但不允許出現JSP指令碼
JSP:指定該標籤的標籤體可以使用JSP指令碼。
(4)dynamic-attributes:指定該標籤庫是否支援動態屬性,只有當定義動態屬性標籤時才需要該子元素。
注:因為JSP2規範不再推薦使用JSP指令碼,所以JSP2自定義標籤的標籤體中不能包含JSP指令碼,所以,實際上body-content元素的值不可以是JSP
定義了上面的標籤庫定義檔案後,將標籤庫檔案放在Web應用的WEB-INF應用路勁或任意子路徑下,Java Web規範會自動載入該檔案,則該檔案定義的標籤庫也將生效。
3.使用標籤庫
在jsp頁面中確定指定的標籤需要兩點?
(1)標籤庫URI:確定使用哪個標籤庫
(2)標籤名:確定使用哪個標籤
使用標籤庫分為以下兩個步驟:
(1)匯入標籤庫:使用taglib編譯指令匯入標籤庫,就是將標籤庫和指定字首關聯起來
(2)使用標籤:在JSP頁面中使用自定義標籤
這裡寫圖片描述

上面的HelloWorldTag標籤沒有任何屬性,所以使用該標籤只需要
這裡寫圖片描述
即可。
這裡寫圖片描述