




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 自定義標(biāo)簽庫開發(fā)自定義標(biāo)簽庫開發(fā)講師:講師: 方立勛方立勛高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:自定義標(biāo)簽簡介:自定義標(biāo)簽簡介l自定義標(biāo)簽主要用于移除jsp頁面中的java代碼。l 移除jsp頁面中的java代碼,只需要完成兩個步驟:編寫一個實(shí)現(xiàn)tag接口的java類,并覆蓋dostarttag方法,把jsp頁面中的java代碼寫到dostarttag方法中。編寫標(biāo)簽庫描述符(tld)文件,在tld文件中對自定義標(biāo)簽進(jìn)行描述。完成以上操作,即可在jsp頁面中導(dǎo)入和使用自定義標(biāo)
2、簽。l快速入門:使用自定義標(biāo)簽輸出客戶機(jī)ipl查看tag接口api文檔,分析自定義標(biāo)簽的執(zhí)行流程。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:tagtag接口的執(zhí)行流程接口的執(zhí)行流程ljsp引擎將遇到自定義標(biāo)簽時,首先創(chuàng)建標(biāo)簽處理器類的實(shí)例對象,然后按照jsp規(guī)范定義的通信規(guī)則依次調(diào)用它的方法。1、public void setpagecontext(pagecontext pc), jsp引擎實(shí)例化標(biāo)簽處理器后,將調(diào)用setpagecontext方法將jsp頁面的pagecontext對象傳遞給標(biāo)簽處理器,標(biāo)簽處理器以后可以通過這個pageconte
3、xt對象與jsp頁面進(jìn)行通信。2、public void setparent(tag t),setpagecontext方法執(zhí)行完后,web容器接著調(diào)用的setparent方法將當(dāng)前標(biāo)簽的父標(biāo)簽傳遞給當(dāng)前標(biāo)簽處理器,如果當(dāng)前標(biāo)簽沒有父標(biāo)簽,則傳遞給setparent方法的參數(shù)值為null。3、public int dostarttag(),調(diào)用了setpagecontext方法和setparent方法之后,web容器執(zhí)行到自定義標(biāo)簽的開始標(biāo)記時,就會調(diào)用標(biāo)簽處理器的dostarttag方法。4、public int doendtag(),web容器執(zhí)行完自定義標(biāo)簽的標(biāo)簽體后,就會接著去執(zhí)行自定
4、義標(biāo)簽的結(jié)束標(biāo)記,此時,web容器會去調(diào)用標(biāo)簽處理器的doendtag方法。5、public void release(),通常web容器執(zhí)行完自定義標(biāo)簽后,標(biāo)簽處理器會駐留在內(nèi)存中,為其它請求服務(wù)器,直至停止web應(yīng)用時,web容器才會調(diào)用release方法。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:自定義標(biāo)簽功能擴(kuò)展:自定義標(biāo)簽功能擴(kuò)展l自定義標(biāo)簽除了可以移除jsp頁面中的java代碼外,它還可以用于完成一些頁面邏輯,例如:通過自定義標(biāo)簽可以控制jsp頁面某一部分內(nèi)容是否執(zhí)行。例如:標(biāo)簽通過自定義標(biāo)簽可以控制標(biāo)簽后的jsp頁面是否執(zhí)行。通過自定義
5、標(biāo)簽可以控制jsp頁面某一部分內(nèi)容重復(fù)執(zhí)行。例如:標(biāo)簽通過自定義標(biāo)簽可以修改jsp頁面內(nèi)容輸出。ltld文件中的四種標(biāo)簽體類型empty jsp scriptless tagdepentend高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip: 簡單標(biāo)簽l由于傳統(tǒng)標(biāo)簽使用三個標(biāo)簽接口來完成不同的功能,顯得過于繁瑣,不利于標(biāo)簽技術(shù)的推廣, sun公司為降低標(biāo)簽技術(shù)的學(xué)習(xí)難度,在jsp 2.0中定義了一個更為簡單、便于編寫和調(diào)用的simpletag接口來實(shí)現(xiàn)標(biāo)簽的功能。實(shí)現(xiàn)simpletag接
6、口的標(biāo)簽通常稱為簡單標(biāo)簽。簡單標(biāo)簽共定義了5個方法:setjspcontext方法setparent和getparent方法setjspbody方法dotag方法高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:simpletagsimpletag方法介紹方法介紹( (課后閱讀課后閱讀apiapi) )lsetjspcontext方法用于把jsp頁面的pagecontext對象傳遞給標(biāo)簽處理器對象 lsetparent方法用于把父標(biāo)簽處理器對象傳遞給當(dāng)前標(biāo)簽處理器對象 lgetparent方法用于獲得當(dāng)前標(biāo)簽的父標(biāo)簽處理器對象 lsetjspbody方法用于
7、把代表標(biāo)簽體的jspfragment對象傳遞給標(biāo)簽處理器對象 ldotag方法用于完成所有的標(biāo)簽邏輯,包括輸出、迭代、修改標(biāo)簽體內(nèi)容等。在dotag方法中可以拋出javax.servlet.jsp.skippageexception異常,用于通知web容器不再執(zhí)行jsp頁面中位于結(jié)束標(biāo)記后面的內(nèi)容,這等效于在傳統(tǒng)標(biāo)簽的doendtag方法中返回tag.skip_page常量的情況。 高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:simpletagsimpletag接口方法的執(zhí)行順序接口方法的執(zhí)行順序l當(dāng)web容器開始執(zhí)行標(biāo)簽時,會調(diào)用如下方法完成標(biāo)簽的初
8、始化web容器調(diào)用標(biāo)簽處理器對象的setjspcontext方法,將代表jsp頁面的pagecontext對象傳遞給標(biāo)簽處理器對象。web容器調(diào)用標(biāo)簽處理器對象的setparent方法,將父標(biāo)簽處理器對象傳遞給這個標(biāo)簽處理器對象。注意,只有在標(biāo)簽存在父標(biāo)簽的情況下,web容器才會調(diào)用這個方法。如果調(diào)用標(biāo)簽時設(shè)置了屬性,容器將調(diào)用每個屬性對應(yīng)的setter方法把屬性值傳遞給標(biāo)簽處理器對象。如果標(biāo)簽的屬性值是el表達(dá)式或腳本表達(dá)式,則web容器首先計(jì)算表達(dá)式的值,然后把值傳遞給標(biāo)簽處理器對象。如果簡單標(biāo)簽有標(biāo)簽體,容器將調(diào)用setjspbody方法把代表標(biāo)簽體的jspfragment對象傳遞進(jìn)來。
9、l執(zhí)行標(biāo)簽時:容器調(diào)用標(biāo)簽處理器的dotag()方法,開發(fā)人員在方法體內(nèi)通過操作jspfragment對象,就可以實(shí)現(xiàn)是否執(zhí)行、迭代、修改標(biāo)簽體的目的。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:jspfragmentjspfragment類類 ljavax.servlet.jsp.tagext.jspfragment類是在jsp2.0中定義的,它的實(shí)例對象代表jsp頁面中的一段符合jsp語法規(guī)范的jsp片段,這段jsp片段中不能包含jsp腳本元素。lweb容器在處理簡單標(biāo)簽的標(biāo)簽體時,會把標(biāo)簽體內(nèi)容用一個jspfragment對象表示,并調(diào)用標(biāo)簽處理
10、器對象的setjspbody方法把jspfragment對象傳遞給標(biāo)簽處理器對象。jspfragment類中只定義了兩個方法,如下所示:lgetjspcontext方法用于返回代表調(diào)用頁面的jspcontext對象.lpublic abstract void invoke(java.io.writer out) 用于執(zhí)行jspfragment對象所代表的jsp代碼片段參數(shù)out用于指定將jspfragment對象的執(zhí)行結(jié)果寫入到哪個輸出流對象中,如果傳遞給參數(shù)out的值為null,則將執(zhí)行結(jié)果寫入到j(luò)spcontext.getout()方法返回的輸出流對象中。(簡而言之,可以理解為寫給瀏覽器)
11、高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:invokeinvoke方法詳解方法詳解 ljspfragment.invoke方法可以說是jspfragment最重要的方法,利用這個方法可以控制是否執(zhí)行和輸出標(biāo)簽體的內(nèi)容、是否迭代執(zhí)行標(biāo)簽體的內(nèi)容或?qū)?biāo)簽體的執(zhí)行結(jié)果進(jìn)行修改后再輸出。例如:在標(biāo)簽處理器中如果沒有調(diào)用jspfragment.invoke方法,其結(jié)果就相當(dāng)于忽略標(biāo)簽體內(nèi)容;在標(biāo)簽處理器中重復(fù)調(diào)用jspfragment.invoke方法,則標(biāo)簽體內(nèi)容將會被重復(fù)執(zhí)行;若想在標(biāo)簽處理器中修改標(biāo)簽體內(nèi)容,只需在調(diào)用invoke方法時指定一個可取出結(jié)果
12、數(shù)據(jù)的輸出流對象(例如stringwriter),讓標(biāo)簽體的執(zhí)行結(jié)果輸出到該輸出流對象中,然后從該輸出流對象中取出數(shù)據(jù)進(jìn)行修改后再輸出到目標(biāo)設(shè)備,即可達(dá)到修改標(biāo)簽體的目的。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:開發(fā)帶屬性的標(biāo)簽:開發(fā)帶屬性的標(biāo)簽l自定義標(biāo)簽可以定義一個或多個屬性,這樣,在jsp頁面中應(yīng)用自定義標(biāo)簽時就可以設(shè)置這些屬性的值,通過這些屬性為標(biāo)簽處理器傳遞參數(shù)信息,從而提高標(biāo)簽的靈活性和復(fù)用性。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:開發(fā)帶屬性的標(biāo)簽:開發(fā)帶屬性的標(biāo)簽l要想讓一個自定義標(biāo)簽具
13、有屬性,通常需要完成兩個任務(wù):在標(biāo)簽處理器中編寫每個屬性對應(yīng)的setter方法在tld文件中描術(shù)標(biāo)簽的屬性l為自定義標(biāo)簽定義屬性時,每個屬性都必須按照javabean的屬性命名方式,在標(biāo)簽處理器中定義屬性名對應(yīng)的setter方法,用來接收jsp頁面調(diào)用自定義標(biāo)簽時傳遞進(jìn)來的屬性值。 例如屬性url,在標(biāo)簽處理器類中就要定義相應(yīng)的seturl(string url)方法。l在標(biāo)簽處理器中定義相應(yīng)的set方法后,jsp引擎在解析執(zhí)行開始標(biāo)簽前,也就是調(diào)用dostarttag方法前,會調(diào)用set屬性方法,為標(biāo)簽設(shè)置屬性。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tipt
14、ip:在:在tldtld中描述標(biāo)簽屬性中描述標(biāo)簽屬性元素的元素的子元素用于描述自定義子元素用于描述自定義標(biāo)簽的一個屬性,自定義標(biāo)簽所具有的每個屬性標(biāo)簽的一個屬性,自定義標(biāo)簽所具有的每個屬性都要對應(yīng)一個都要對應(yīng)一個元素元素 。descriptionaaaatruetrueobjecttype元素名元素名是否必須指定是否必須指定描描 述述description否否用于指定屬性的描述信息。用于指定屬性的描述信息。name是是用于指定屬性的名稱。屬性名稱是大小寫敏感的,并且用于指定屬性的名稱。屬性名稱是大小寫敏感的,并且不能以不能以jsp、_jsp、java和和sun開頭。開頭。required否否用
15、于指定在用于指定在jsp頁面中調(diào)用自定義標(biāo)簽時是否必須設(shè)置這頁面中調(diào)用自定義標(biāo)簽時是否必須設(shè)置這個屬性。其取值包括個屬性。其取值包括true和和false,默認(rèn)值為,默認(rèn)值為false,true表表示必須設(shè)置,否則可以設(shè)置也可以不設(shè)置該屬性。示必須設(shè)置,否則可以設(shè)置也可以不設(shè)置該屬性。rtexprvalue否否rtexprvalue是是runtime expression value(運(yùn)行時表達(dá)式)(運(yùn)行時表達(dá)式)的英文簡寫,用于指定屬性值是一個靜態(tài)值或動態(tài)值。的英文簡寫,用于指定屬性值是一個靜態(tài)值或動態(tài)值。其取值包括其取值包括true和和false,默認(rèn)值為,默認(rèn)值為false,false表
16、示只能為表示只能為該屬性指定靜態(tài)文本值,例如該屬性指定靜態(tài)文本值,例如 123 ;true表示可以為該表示可以為該屬性指定一個屬性指定一個jsp動態(tài)元素,動態(tài)元素的結(jié)果作為屬性值,動態(tài)元素,動態(tài)元素的結(jié)果作為屬性值,例如例如jsp表達(dá)式表達(dá)式。type否否用于指定屬性值的用于指定屬性值的java類型。類型。高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:案例:案例l使用標(biāo)簽控制頁面邏輯案例:開發(fā)防盜鏈標(biāo)簽開發(fā)標(biāo)簽開發(fā)標(biāo)簽開發(fā)迭代標(biāo)簽開發(fā)html轉(zhuǎn)義標(biāo)簽打包標(biāo)簽庫高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:jstlj
17、stl標(biāo)簽庫標(biāo)簽庫l核心標(biāo)簽庫核心標(biāo)簽庫 l國際化標(biāo)簽國際化標(biāo)簽l數(shù)據(jù)庫標(biāo)簽數(shù)據(jù)庫標(biāo)簽 lxml標(biāo)簽ljstl函數(shù)(el函數(shù))高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽l 標(biāo)簽用于輸出一段文本內(nèi)容到pagecontext對象當(dāng)前保存的“out”對象中。 屬性名屬性名是否支是否支持持elel屬性類型屬性類型屬屬 性性 描描 述述valuetrueobject指定要輸出的內(nèi)容escapexmltrueboolean指定是否將、&、 等特殊字符進(jìn)行html編碼轉(zhuǎn)換后再進(jìn)行輸出。默認(rèn)值為truedefaulttrueobject指定如果value屬性
18、的值為null時所輸出的默認(rèn)值高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽l標(biāo)簽用于把某一個對象存在指定的域范圍內(nèi),或者設(shè)置web域中的java.util.map類型的屬性對象或javabean類型的屬性對象的屬性。 屬性名屬性名是否支持是否支持elel屬性類型屬性類型屬屬 性性 描描 述述valuetrueobject用于指定屬性值varfalsestring用于指定要設(shè)置的web域?qū)傩缘拿Qscopefalsestring用于指定屬性所在的web域targettrueobject用于指定要設(shè)置屬性的對象,這個對象必須是javabean對象或
19、java.util.map對象propertytruestring用于指定當(dāng)前要為對象設(shè)置的屬性名稱高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽 l標(biāo)簽用于刪除各種web域中的屬性。其語法格式如下: 高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽l標(biāo)簽用于捕獲嵌套在標(biāo)簽體中的內(nèi)容拋出的異常,其語法格式如下:nested actionslvar屬性用于標(biāo)識標(biāo)簽捕獲的異常對象,它將保存在page這個web域中。 異常:異常 myex.getmessage:異常 myex.getcause:異常 mye
20、x.getstacktrace:高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽l標(biāo)簽可以構(gòu)造簡單的“if-then”結(jié)構(gòu)的條件表達(dá)式 屬性名屬性名是否支持是否支持elel屬性類型屬性類型屬屬 性性 描描 述述testtrueboolean決定是否處理標(biāo)簽體中的內(nèi)容的條件表達(dá)式 varfalsestring用于指定將test屬性的執(zhí)行結(jié)果保存到某個web域中的某個屬性的名稱scopefalsestring指定將test屬性的執(zhí)行結(jié)果保存到哪個web域中高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽 l
21、標(biāo)簽用于指定多個條件選擇的組合邊界,它必須與和標(biāo)簽一起使用。使用,和三個標(biāo)簽,可以構(gòu)造類似 “if-else if-else” 的復(fù)雜條件判斷結(jié)構(gòu)。 pagecontext(count,2)對不起,沒有符合您要求的記錄。符合您要求的記錄共有$count條.高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽l標(biāo)簽用于對一個集合對象中的元素進(jìn)行循環(huán)迭代操作,或者按指定的次數(shù)重復(fù)迭代執(zhí)行標(biāo)簽體中的內(nèi)容。 屬性名屬性名是否支持是否支持elel屬性類型屬性類型屬屬 性性 描描 述述varfalsestring指定將當(dāng)前迭代到的元素保存到page這個web域中的
22、屬性名稱itemstrue任何支持的類型將要迭代的集合對象varstatusfalsestring指定將代表當(dāng)前迭代狀態(tài)信息的對象保存到page這個web域中的屬性名稱begintrueint如果指定items屬性,就從集合中的第begin個元素開始進(jìn)行迭代,begin的索引值從0開始編號;如果沒有指定items屬性,就從begin指定的值開始迭代,直到end值時結(jié)束迭代endtrueint參看begin屬性的描述steptrueint指定迭代的步長,即迭代因子的迭代增量高級軟件人才實(shí)作培訓(xùn)專家高級軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 tiptip:標(biāo)簽標(biāo)簽 l在jsp頁面進(jìn)行url的相關(guān)操作時,經(jīng)常要在url地址后面附加一些參數(shù)。標(biāo)簽可以嵌套在、或標(biāo)簽內(nèi),為這些標(biāo)簽所使用的url地址附加參數(shù)。標(biāo)簽在為一個url地址附加參數(shù)時,將自動對參數(shù)值進(jìn)行url編碼,例如,如果傳遞的參數(shù)值為“中國”,則將其轉(zhuǎn)換為“%d6%d0%b9%fa”后再附加到url地址后面,這也就是使用標(biāo)簽的最大好處。 lhttp:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)綜合體改造抵押協(xié)議
- 2025年度養(yǎng)豬場動物疫病監(jiān)測與預(yù)警協(xié)議
- 2025年度個人信息保護(hù)與信息安全保密協(xié)議書
- 二零二五年度食品飲料企業(yè)財(cái)務(wù)代理記帳服務(wù)合同
- 2025年廣西自然資源職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案一套
- 商業(yè)廣場改造貸款協(xié)議
- 2025年度公司終止職工勞動合同解除與就業(yè)援助合同
- 2025年北京綠色生態(tài)居住區(qū)拆遷補(bǔ)償與生態(tài)修復(fù)合同
- 2025年度商鋪轉(zhuǎn)租定金及租賃期終止處理合同
- 2025年度高級管理人員聘用合同與錄用合同
- 安全管理人員七大職責(zé)
- 《國民經(jīng)濟(jì)行業(yè)分類與代碼》
- 音樂教育國際化進(jìn)程-洞察分析
- 植入式靜脈給藥裝置護(hù)理技術(shù)課件
- 單兵綜合演練
- 疼痛中醫(yī)護(hù)理
- 歐式風(fēng)格的室內(nèi)設(shè)計(jì)
- GB/T 24091-2024適應(yīng)氣候變化脆弱性、影響和風(fēng)險評估指南
- 現(xiàn)代物流基礎(chǔ)題庫與參考答案
- 特色療法中藥穴位敷貼課件
- 2024年山東工程職業(yè)技術(shù)大學(xué)單招職業(yè)傾向性測試題庫(500題)含答案解析
評論
0/150
提交評論