這次講的是jsp2.0的特性之一,我們可以編寫标簽檔案,指沒有标簽處理器和标簽類庫描述符的定制動作指令,不編譯,無标簽類描述符。
本文結構:
tag檔案隻是以tag為字尾名的文本檔案。除了jsp頁面指令外,其他jsp元素都可以出現在tag檔案中頁面引用格式。一,不需要編譯,隻要jsp文法即可,這意味不懂java的人也可以編寫。二,不許需要面搜标簽庫描述符。
格式:
tagdir:用于指定tag檔案目錄,當頁面使用<ui:xxxx>進,會查找該目錄下對應的xxxx.tag檔案。
prefix:指定使用時标簽字首
使用:
包結構圖和效果圖(将伺服器目前時間顯示):

感興趣不?往下看吧
firsttag.tag:
firsttagtest.jsp
taglib、include、attribute、variable。
1)
#tag 指令如同jsp網頁的page指令,用來設定标簽檔案。
#display-name表示圖形化開發工具顯示<display-name>所指定 的名稱;
#body-content表示可能的值有三種,分别是empty、scriptless、tagdependent、empty。
empty為标 簽中沒有主體内容,
scriptlet為标簽中的主體内容el、jsp動作元素,但不可以為jsp腳本元素,
tagdependent表示标簽中的主體内 容交由tag自己去處理,預設值為scriptless;
#dynamic-attributes表示設定标簽檔案動态屬性的名稱,當dynamic- attributes設定時,将會産生一個map類型的集合對象,用來存放屬性的名稱和值;
#small_icon表示在圖形化開發工具顯 示<small-icon>所指定的tld相對路徑的小圖示,大小為16x16;
#large-icon表示在圖形化開發工具顯 示<large-icon>所指定的tld相對路徑的大圖示,大小為32x32;
#description表示用來說明此标簽檔案的相關信 息;
#example表示用來增加更多的标簽使用說明,包括标簽應用時的範例;
#language、import、pageencoding、 iselignored這些屬性與page指令相對應的屬性相同。
2)
這 個指令用來設定自定義标簽的屬性。其中name表示屬性的名字;
required表示是否為必要,預設為false;
rtexprvalue表示屬性值是 否可以為run-time表達式。如為true,表示屬性可用動态的方式來指定,如:<mytag:read num="${param.num}"/>,如為false,則一定要用靜态的方式來指定屬性值;
type表示這個屬性的類型,預設值為 java.lang.string;description用來說明此屬性的相關資訊
3)
這 個指令用來設定标簽檔案的變量。其中name-given表示直接指定變量的名稱;
name-from-attribute表示以自定義标簽的某個屬性值 為變量名稱;
alias表示聲明一個局部範圍屬性,用來接收變量的值;variable-class表示變量的類名稱,預設值為 java.lang.string;
declare表示此變量是否聲明預設值為true;scope表示此變量的範圍,範圍是:at_begin、 at_end和nested,預設值為nested;description用來說明此變量的相關資訊
········variable案例引出 dobody
jar結構 和 效果圖
dobodydemo.tag
dobodytest.jsp
<jsp:dobody>與<jsp:invoke>動作元素,前者是用來處理卷标本體文字,後者則是用來設 定标簽間的fragment,下面兩個動作元素搭配着attribute與variable兩個指令元素。
首先介紹<jsp:dobody>您可以用它來決定是否顯示本體文字,例如撰寫如下的tag file:
check.tag
必須先說明的是,這邊使用了scriptlet,這并不是一個良好的示範,若能搭配jstl或自訂标簽庫來完成tag file的撰寫會是比較好的,這邊純綷是為了說明友善才使用了scriptlet。
上面這個tag
file會檢查傳入的屬性password是否符合我們設定的密碼,如果符合就執行<jsp:dobody>,表示顯示卷标之間的本體文字,
否則顯示密碼不正确的訊息,attribute指令元素可以指定自訂卷标所使用的屬性文字,可以使用下面的jsp網頁來測試:
test.jsp
您可以發現,tag file即使是用來當作自訂标簽庫的簡便方式,也是十分的友善,不需要在tld檔中作額外的設定,也可以得到相關的功能。
attribute除了指定屬性文字之外,也可以将屬性當作fragment傳入,友善在tag file中作個别的處理,例如下面撰寫一個table.tag:
table.tag
在這個tag file中,将attribute的屬性設定為fragment,然後想取得指定的fragment的話,就可以使用<jsp: invoke>動作元素,并指定fragment的名稱,使用下面這個jsp網頁來測試:
在jsp網頁中,同樣的是使用<jsp:attribute>來說定fragment的文字内容,執行這個jsp網頁,會傳回以下的内容:
在tag file與jsp網頁之間,可以使用variable指令元素設定scripting variable,以在兩者之間傳遞變量内容,例如撰寫以下的tag file:
precode.tag
在這個tag file中,使用variable設定scripting
variable為"code",作用範圍為"nested",也就是在起始卷标與結束卷标之間,而其中<jsp:dobody>中多了一項
屬性var,表示在jsp網頁中的<jsp:body>卷标中的文字内容将設定給"code"變量,可以用下面這個jsp網頁來測試:
<jsp:body>之間的虛拟程式代碼将會傳入給"code"變量,由于它是scripting
variable,可以在标簽之内起作用,是以在<jsp:attribute>中的el式${code}可以取得tag
file中"code"的内容,也就是<jsp:body>傳入的文字,之後我們将<jsp:attribute>的内容當作
fragment在tag file中作處理,結果将會如以下的網頁: