Tag文件和Tag標記

 

1 Tag文件的結構 java

—Tag文件 less

—擴展名爲.tag的文本文件 jsp

—結構幾乎和JSP文件相同 ui

—一個Tag文件中能夠有 編碼

—普通的HTML標記符 spa

—某些特殊的指令標記(與JSP指令、動做標記對應) .net

—成員變量和方法 對象

—Java程序片 ip

—Java表達式。 內存

AddSum.tag

<p>這是一個Tag文件,負責計算1~100內的奇數之和:

<% int sum=0,i=1;

for(i=1;i<=100;i++)

{ if(i%2==1) sum=sum+I; }

out.println(sum);

%>

EvenSum.tag

<p>這是一個Tag文件,負責計算1~100內的偶數之和:

<% int sum=0,i=1;

for(i=1;i<=100;i++)

{ if(i%2==0) sum=sum+I; }

out.println(sum);

%>

2 Tag文件的存儲目錄

—肯定的Tag文件存放目錄

—引用Tag文件的JSP頁面:Web服務目錄

—Tag文件存放目錄:Web服務目錄\WEB-INF\tags

其中WEB-INFtags都是固定的目錄名稱,而tags下的子目錄的名稱可由用戶給定。

—注意:Tag文件必須使用ANSI編碼保存

3 Tag標記

1Tag文件的調用

—某個Web服務目錄下的Tag文件只能由該Web服務目錄(包括該Web服務目錄的子目錄)中的JSP頁面調用

—JSP頁面必須經過Tag標記調用Tag文件

2Tag標記

—伴隨着Tag文件產生,編寫完Tag文件並保存到特定目錄後,就自定義出了一個Tag標記,其格式爲:

<Tag文件名字/>

<Tag文件名字>

標記體

</Tag文件名字>

2Tag標記

—自定義標記庫:簡稱標記庫,存放在同一目錄中的若干個Tag文件所對應的Tag標記的全體

3Tag標記的使用

—第一步:使用taglib指令標記引入該Web服務目錄下的標記庫

<%@taglib tagdir=「自定義標記庫的位置」 prefix=「前綴」%>

—一個JSP頁面可使用幾個taglib指令標記引入若干個標記庫

<%@taglib tagdir=「/WEB-INF/tags」 prefix="beijing"%>

%@taglib tagdir=「/WEB-INF/tags/geng」 prefix=「dalian"%

—第二步:使用帶有前綴的Tag標記調用相應的Tag文件,其中的前綴由taglib指令中的prefix屬性指定。如:

<beijing:AddSum/>

<dalian:EvenSum/>

—前綴:經過前綴能夠有效地區分不一樣標記庫中具備相同名字的標記文件。

—JSP引擎處理JSP頁面中的Tag標記的原理以下:

①首次調用Tag文件:JSP引擎會將Tag文件轉譯成一個Java文件,並編譯這個Java文件生成字節碼文件,而後執行這個字節碼文件實現Tag文件的動態處理,最後將有關結果發給用戶端

②再次調用,若已被編譯爲字節碼文件,JSP引擎直接執行字節碼文件實現Tag文件的動態處理

③再次調用,發生改變,則同①

補充:Tag文件在 「<%!」 「 /%>」標記符號之間聲明的變量,和JSP 「<%!」 「 /%>」之間聲明的變量相似,其有效範圍是整個Tag文件

但有一點不一樣:每當Tag文件對應的字節碼被執行完畢後,這些變量便可釋放所佔有的內存空間

4Tag標記的標記體

—一個Tag文件對應一個Tag標記,並讓JSP頁面使用這個Tag標記動態執行該Tag文件。Tag標記的格式: <Tag文件名字/>

<Tag文件名字>

標記體

</Tag文件名字>

—動態地向Tag文件傳遞信息

—相應地,Tag文件經過調用<jsp:doBody/>處理JSP頁面傳遞過來的「標記體」

—標記體的形式:文本數據

4 Tag文件中的經常使用指令

—JSP文件相似,Tag文件中也有一些經常使用指令,這些指令將影響Tag文件的行爲。

—Tag文件中常常使用的指令有:tagtaglibincludeattributevariable

1 tag指令

—Tag文件中的tag指令相似於JSP文件中的page指令。

—Tag指令從整體上影響標記文件的處理和表示

<%@ tag 屬性1= 「value1」 屬性2= 「value2」 …屬性n= 「valueN」 >

—一個Tag文件中可使用多個tag指令

<%@tag 屬性 1= 「value 1」>

<%@ tag 屬性 2= 「value 2」 >

<%@ tag 屬性 n= 「value n」 >

—Tag指令能夠操做的屬性有:body-contentlanguageimportpageEncoding

body-content 屬性

—指定JSP頁面使用Tag標記時可使用的標記體格式

empty——沒有標記體

tagdependent——有或無標記體,純文本處理

scriptless——有或無標記體,標記體中不能有Java程序片

Tag文件經過<jsp: dobody>獲取JSP頁面傳遞的「標記體」

language 屬性

指定Tag文件使用的腳本語言,目前只能使用Java,其默認值就是java

import 屬性

—Tag文件引入Java核心包中的類

pageEncoding屬性

—指定Tag文件的字符編碼,其默認值是ISO-8859-1Tag文件必須使用ANSI編碼保存

2include指令

—使用方法和做用與JSP文件中相似。

3 attribute指令

—Tag文件傳值。

—Tag文件充當着可複用代碼的角色,若是一個Tag文件能容許使用它的JSP頁面向該Tag文件傳遞字符串數據,就使得Tag文件的功能更爲強大。

—Tag文件中經過使用attribute指令,能夠動態地向該Tag文件傳遞須要的字符串數據。attribute指令的格式以下:

<%@ attribute name=「對象名字」

required=「true」|「false「 type=「對象的類型」%>

<%@ attribute name=「對象名字」

required=「true」|「false「 type=「對象的類型」%>

•nameJSP頁面在調用Tag文件時,可向name屬性指定的對象傳遞一個引用

•type:對象的類型,必須帶有包名。若是未指定,則對象的類型爲java.lang.String類型

•requried:可選,默認爲false。指定爲true時,必須傳遞引用,false時可傳可不傳

•JSP頁面使用Tag標記向所調用的Tag文件中name屬性指定的對象傳遞一個引用。方式以下

<前綴:Tag文件名字對象名字=「對象的引用」/>

<前綴:Tag文件名字 對象名字=「對象的引用」>

標記體

</前綴:Tag文件名字>

3 attribute指令

舉例一

•MyTag.tag

<%@ attribute name=「length」 required=「true 」 %>

•JSP頁面:

<computerMyTag length=「1000」/>

舉例二

•YourTag.tag

<%@ attribute name=「result 」 required=「true 」 type=「java.lang.Double」 %>

•JSP頁面:

<computerYourTag result=「<%= new Double(66.99)%>」/>

Tag文件中,不能夠在定義和attribute指令中的name屬性指定的對象具備相同名字的變量,不然將隱藏attribute指令中的對象,使其失效。

4 variable指令

Tag文件經過使用variable指令能夠將Tag文件中的對象返回給調用該Tag文件的JSP頁面。

1variable指令的格式

」 variab<%@ variable name-given=「對象名字le-class=「對象的類型」 scope=「有效範圍」%>

: <%@ variable name-given="time" variable-class="java.util.Date" scope="AT_END" %>

variable指令給出的對象的名字是time、類型爲java.util.Date、有效範圍是AT_END

2)對象的返回

jspContext調用setAttribute(「對象的名字」,對象的引用)方法存儲對象的名字以及該對象的引用。好比:jspContext.setAttribute("time",new Date());將名字是timeDate對象存儲到jspContext中。

如下的variable指令:<%@ variable name-given=time variable-class=java.util.Date scope=AT_END %>JSP頁面返回名字是timeDate對象。

5 taglib指令

一個Tag文件可使用Tag標記來調用其它的Tag文件。

Tag文件必須使用<taglib>指令引入該Web服務目錄下的標記庫,纔可使用Tag標記來調用相應的Tag文件。<taglib>指令的格式以下:

<%@ taglib tagdir="自定義標記庫的位置" prefix="前綴">

一個Tag文件也可使用幾個<taglib>指令標記引入若干個標記庫,例如:

<%@ taglib tagdir="/WEB-INF/tags" prefix="beijing"%>

<%@ taglib tagdir="/WEB-INF/tags/tagsTwo" prefix="dalian"%>

5  Tag標記的嵌套

當咱們使用Tag標記時,能夠帶有標記體,標記體還能夠是一個Tag標記,這就實現了Tag標記的嵌套。

• Tag標記中的標記體由Tag文件的<jsp:doBody/>標記負責處理,而在Tag文件中,<jsp:doBody />標記被替換成對「標記體」進行處理後所獲得的結果。

相關文章
相關標籤/搜索