第3章 Tag文件與Tag標(biāo)記(第2版)_第1頁
第3章 Tag文件與Tag標(biāo)記(第2版)_第2頁
第3章 Tag文件與Tag標(biāo)記(第2版)_第3頁
第3章 Tag文件與Tag標(biāo)記(第2版)_第4頁
第3章 Tag文件與Tag標(biāo)記(第2版)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

<JSP程序設(shè)計(jì)>(第2版)第3章

配合<JSP程序設(shè)計(jì)(第2版)代碼>一起使用Powerpoint制作:耿祥義張躍平普通高等教育“十一五”國(guó)家級(jí)規(guī)劃教材Tag文件與Tag標(biāo)記主要內(nèi)容Tag文件的結(jié)構(gòu)Tag文件的存儲(chǔ)目錄Tag標(biāo)記Tag文件中的常用指令Tag標(biāo)記的嵌套難點(diǎn)掌握Tag文件中的attribute指令掌握Tag文件中的variable指令關(guān)鍵實(shí)踐使用標(biāo)記體使用attribute指令和variable指令第3章導(dǎo)讀2§3.1Tag文件的結(jié)構(gòu)

Tag文件是一種特殊的文本文件。Tag文件和JSP文件很類似,可以被JSP頁面動(dòng)態(tài)加載調(diào)用,但是用戶不能通過該Tag文件所在Web服務(wù)目錄直接訪問這個(gè)Tag文件。Tag文件是擴(kuò)展名為.tag的文本文件,其結(jié)構(gòu)幾乎和JSP文件相同。一個(gè)Tag文件中可以有普通的HTML標(biāo)記符、某些特殊的指令標(biāo)記(見3.3)、成員變量和方法的聲明、Java程序片和Java表達(dá)式。

參考AddSum.tag,EvenSum.tag3AddSum.tag,EvenSum.tagOddSum.tag<P>這是一個(gè)Tab文件,負(fù)責(zé)計(jì)算1~100內(nèi)的奇數(shù)之和:<%intsum=0,i=1;for(i=1;i<=100;i++){if(i%2==1)sum=sum+i;}out.println(sum);%>EvenSum.tag<P>這是一個(gè)Tab文件,負(fù)責(zé)計(jì)算1~100內(nèi)的偶數(shù)之和:<%intsum=0,i=1;for(i=1;i<=100;i++){if(i%2==0)sum=sum+i;}out.println(sum);%>4§3.2Tag文件的存儲(chǔ)目錄

如果某個(gè)Web服務(wù)目錄下的JSP頁面準(zhǔn)備調(diào)用一個(gè)Tag文件,那么我們必須在該Web服務(wù)目錄下,建立如下的目錄結(jié)構(gòu):

Web服務(wù)目錄\WEB-INF\tags

比如:

ch3\WEB-INF\tags其中的WEB-INF和tags都是固定的目錄名稱,而tags下的子目錄的名稱可由用戶給定。5§3.3Tag標(biāo)記3.3.1Tag標(biāo)記與Tag文件當(dāng)我們編寫了一個(gè)Tag文件并保存到特定目錄中后,也就自定義出了一個(gè)標(biāo)記,該標(biāo)記的格式為:

<Tag文件名字/>或

<Tag文件名字>標(biāo)記體</Tag文件名字>

一個(gè)Tag文件對(duì)應(yīng)著一個(gè)標(biāo)記,該標(biāo)記被習(xí)慣地稱為Tag標(biāo)記,將存放在同一目錄中的若干個(gè)Tag文件所對(duì)應(yīng)的Tag標(biāo)記的全體稱之為一個(gè)自定義標(biāo)記庫(kù)或簡(jiǎn)稱為標(biāo)記庫(kù)。63.3.2Tag標(biāo)記的使用

一個(gè)JSP頁面通過使用Tag標(biāo)記來調(diào)用一個(gè)Tag文件。分為兩步:

1.使用<taglib>指令標(biāo)記引入該Web服務(wù)目錄下的標(biāo)記庫(kù)。<taglib>指令的格式如下:

<%@taglibtagdir="自定義標(biāo)記庫(kù)的位置"prefix="前綴">一個(gè)JSP頁面可以使用幾個(gè)<taglib>指令標(biāo)記引入若干個(gè)標(biāo)記庫(kù),例如:

<%@taglibtagdir="/WEB-INF/tags"prefix="beijing"%><%@taglibtagdir="/WEB-INF/tags/geng"prefix="dalian"%>

2.JSP頁面使用帶前綴的Tag標(biāo)記調(diào)用相應(yīng)的Tag文件,其中的前綴由<taglib>指令中的prefix屬性指定。例如:

<beijing:OddSum/><dalian:EvenSum/>例3-17例1

例子1中的JSP頁面保存在Web服務(wù)目錄ch3中,該JSP頁面所調(diào)用的Tag文件是3.1節(jié)中提到的OddSum.tag和EvenSum.tag。example3_1.jsp的效果如圖3.1。

<%@pagecontentType="text/html;Charset=GB2312"%><%@taglibtagdir="/WEB-INF/tags"prefix="beijing"%><%@taglibtagdir="/WEB-INF/tags/geng"prefix="dalian"%><html><bodybgcolor=cyan><h3>以下是調(diào)用Tag文件的效果:</h3><beijing:OddSum/><h3>以下是調(diào)用Tag文件的效果:</h3><dalian:EvenSum/></body></html>83.3.3Tag標(biāo)記的標(biāo)記體標(biāo)記的格式為:

<Tag文件名字/>或

<Tag文件名字>標(biāo)記體</Tag文件名字>當(dāng)JSP頁面調(diào)用一個(gè)Tag文件時(shí)可能希望動(dòng)態(tài)地向該Tag文件傳遞信息,那么就可以使用帶有標(biāo)記體的Tag標(biāo)記來執(zhí)行一個(gè)Tag文件,Tag標(biāo)記中的“標(biāo)記體”就會(huì)傳遞給相應(yīng)的Tag文件,這個(gè)Tag文件通過使用

<jsp:doBody/>標(biāo)記處理JSP頁面?zhèn)鬟f過來的“標(biāo)記體”。詳細(xì)討論見3.4節(jié)。例3-29例2

例子2中,example3_2.jsp頁面調(diào)用Show.tag文件,而且通過標(biāo)記體向Show.tag文件傳遞文本數(shù)據(jù)。Show.tag文件使用<jsp:doBody/>處理example3_2.jsp頁面?zhèn)鬟f過來的文本數(shù)據(jù),將該文本數(shù)據(jù)循環(huán)顯示3次并逐次增大文本字體的字號(hào)。Show.tag保存在ch3\WEB-INF\tags目錄中,example3_2.jsp的效果如圖3.2。

10§3.4Tag文件中的常用指令

3.4.1Tag指令

Tag文件中的tag指令類似于JSP文件中的page指令。Tag文件通過使用tag指令可以指定某些屬性的值,以便從總體上影響Tag文件的處理和表示。tag指令的語法如下:

<%@tag屬性1="屬性值"屬性2="屬性值"…屬性n="屬性值"%>在一個(gè)Tag文件中可以使用多個(gè)tag指令,因此我們經(jīng)常使用多個(gè)tag指令為屬性指定需要的值:

<%@tag屬性1="屬性值"%><%@tag屬性2="屬性值"%>……<%@tag屬性n="屬性值"%>tag指令可以操作的屬性有:body-content、language、import、pageEncoding。113.4.1Tag指令_body-content屬性

body-content屬性的值可以確定JSP頁面使用Tag標(biāo)記時(shí)是否可以有標(biāo)記體,如果允許有標(biāo)記體,該屬性會(huì)給出標(biāo)記體內(nèi)容的類型。body-content屬性值有:empty、tagdependent、scriptless,默認(rèn)值是scriptless。

屬性的值是empty,JSP頁面必須使用沒有標(biāo)記體的Tag標(biāo)記:<Tag文件名字/>來調(diào)用相應(yīng)的Tag文件。

屬性的值是tagdependent或scriptless,JSP頁面使用無標(biāo)記體或有標(biāo)記體的Tag標(biāo)記:<Tag文件名字>標(biāo)記體</Tag文件名字>來調(diào)用相應(yīng)的Tag文件。

注:屬性值是scriptless,那么標(biāo)記體中不能有Java程序片;屬性值是tagdependent,那么Tag文件將標(biāo)記體的內(nèi)容按純文本處理。

123.4.1Tag指令_language屬性

language屬性的值指定Tag文件使用的腳本語言,目前只能取值java,其默認(rèn)值就是java。133.4.1Tag指令_import屬性

import屬性的作用是為Tag文件引入Java核心包中的類,這樣就可以在Tag文件的程序片部分、變量及方法聲明部分、表達(dá)式部分使用Java核心包中的類。import屬性可以取多個(gè)值。

import屬性已經(jīng)有如下值:

"java.lang.*"、"javax.servlet.*"、"javax.servlet.jsp.*"、"javax.servlet.http.*"。

143.4.1Tag指令_pageEncoding屬性該屬性指定Tag文件的字符編碼,其默認(rèn)值是ISO-8859-1。153.4.2include指令

在Tag文件中也有和JSP文件類似的include指令標(biāo)記,其使用方法和作用與JSP文件中的include指令標(biāo)記類似。include指令標(biāo)記的作用是在Tag文件中出現(xiàn)該指令的位置處,靜態(tài)插入一個(gè)文件。其語法格式如下:

<%@includefile="文件的URL"%>

163.4.3attribute指令

在Tag文件中通過使用attribute指令,可以讓使用它的JSP頁面向該Tag文件傳遞需要的數(shù)據(jù)。attribute指令的格式如下:<%@attributename="對(duì)象名字"required="true"|"false"type="對(duì)象的類型"%>注:attribute指令中的name屬性是必需的。比如,一個(gè)Tag文件MyTag.tag中有如下的attribute指令:

<%@attributename="length"required="true"%>那么JSP頁面就可以如下使用Tag標(biāo)記(假設(shè)標(biāo)記的前綴為computer)調(diào)用MyTag.tag:

<computer:MyTaglength="1000"/>或

<computer:MyTaglength="1000">我向Tag文件中傳遞的值是1000<computer:MyTag/>例3-3,3-417例3

例子3中,Triangle.tag存放在ch3\WEB-INF\tags目錄中,該Tag文件負(fù)責(zé)計(jì)算、顯示三角形的面積。example3_3.jsp使用Tag標(biāo)記調(diào)用Triangle.tag文件,并且向Triangle.tag文件傳遞三角形三邊的長(zhǎng)度。example3_3.jsp的效果如圖3.3。

18例4

例子4中,JSP頁面只負(fù)責(zé)將學(xué)生的姓名和成績(jī)分別存放到鏈表(java.util.LinkedLst類型對(duì)象)中,然后將鏈表傳遞給Sort.tag,Sort.tag負(fù)責(zé)按從低到高顯示學(xué)生的成績(jī)。example3_4.jsp的效果如圖3.4。

193.4.4variable指令

Tag文件通過使用variable指令可以將Tag文件中的對(duì)象返回給調(diào)用該Tag文件的JSP頁面。(1)variable指令的格式<%@variablename-given=“對(duì)象名字”variable-class=“對(duì)象的類型”scope=“有效范圍”%>

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

該variable指令給出的對(duì)象的名字是time、類型為java.util.Date、有效范圍是AT_END。

(2)對(duì)象的返回jspContext調(diào)用setAttribute(“對(duì)象的名字”,對(duì)象的引用)方法存儲(chǔ)對(duì)象的名字以及該對(duì)象的引用。比如:jspContext.setAttribute("time",newDate());將名字是time的Date對(duì)象存儲(chǔ)到j(luò)spContext中。以下的variable指令:<%@variablename-given="time"variable-class="java.util.Date"scope="AT_END"%>為JSP頁面返回名字是time的Date對(duì)象。例3-520例5

例子5中,Tag文件GiveRoot.tag負(fù)責(zé)求出一元二次方程的根。JSP頁面在調(diào)用Tag文件時(shí),使用attribute指令將方程的系數(shù)傳遞給Tag文件;Tag文件GiveRoot.tag使用variable指令返回一元二次方程的根給調(diào)用該Tag文件的JSP頁面。例子5中的useOne.jsp和useTwo.jsp都使用Tag標(biāo)記調(diào)用GiveRoot.tag,二者都可以得到GiveRoot.tag返回的方程的兩個(gè)根,但是二者使用不同的方式來處理和顯示方程的兩個(gè)根。userOne.jsp將方程的根保留最多3位小數(shù),并計(jì)算方程的兩個(gè)根之和,userTwo.jsp將方程的根保留最多5位小數(shù),并計(jì)算方程的兩個(gè)根之積。userOne.jsp和userTwo.jsp的效果分別如圖3.5(1)和3.5(2)

。

213.4.5taglib指令一個(gè)Tag文件可以使用Tag標(biāo)記來調(diào)用其它的Tag文件。

Tag文件必須使用<taglib>指令引入該Web服務(wù)目錄下的標(biāo)記庫(kù),才可以使用Tag標(biāo)記來調(diào)用相應(yīng)的Tag文件。<taglib>指令的格式如下:

<%@taglibtagdir="自定義標(biāo)記庫(kù)的位置"prefix="前綴">一個(gè)Tag文件也可以使用幾個(gè)<taglib>指令標(biāo)記引入若干個(gè)標(biāo)記庫(kù),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論