版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、自定義標(biāo)簽IT資訊交流網(wǎng) 什么是自定義標(biāo)簽自定義標(biāo)簽是指JSP自定義標(biāo)簽。自定義標(biāo)簽在功能上邏輯上與javaBean 類似,都封裝Java 代碼。自定義標(biāo)簽是可重用的組件代碼,并且允許開發(fā)人員為復(fù)雜的操作提供邏輯名稱。自定義標(biāo)簽是在JSP1.1規(guī)范里最早提出的 從標(biāo)簽的來源上看,JSP中的標(biāo)簽庫可以分為兩種類型:一種是JSP標(biāo)準(zhǔn)標(biāo)簽庫(JSP Standard Tag Library,JSTL),它是JSP開發(fā)環(huán)境供應(yīng)商開發(fā)的;另一種是JSP開發(fā)環(huán)境的使用者(即用戶)自己定義的標(biāo)簽。通過使用標(biāo)簽庫,可以簡化JSP和Web應(yīng)用程序的開發(fā),減少JSP中的腳本代碼量,大大降低JSP頁面的復(fù)雜度,并且
2、使代碼最大程度地重用IT資訊交流網(wǎng) 標(biāo)簽庫的接口和類的繼承關(guān)系標(biāo)簽庫 API 定義在 javax.servlet.jsp.tagext 包中IT資訊交流網(wǎng) 標(biāo)簽庫的接口和類的繼承關(guān)系 開發(fā)自定義標(biāo)簽,其核心就是要編寫處理器類,一個(gè)標(biāo)簽對應(yīng)一個(gè)標(biāo)簽 處理器類,而一個(gè)標(biāo)簽庫則是很多標(biāo)簽處理器的集合。JSP所有的標(biāo)簽 處理器類都實(shí)javax.servlet.jsp.tagext.JspTag接口。這個(gè)接口是一個(gè)標(biāo)記接口,它有兩個(gè)直接子接口:簡單標(biāo)簽:標(biāo)簽處理類實(shí)現(xiàn)SimpleTag接口,它是JSP2.0新增加的接口,代表簡單的標(biāo)簽;經(jīng)典標(biāo)簽:jsp2.0以前標(biāo)簽處理類實(shí)現(xiàn)Tag接口,它是經(jīng)典的、必須
3、實(shí)現(xiàn)的接口,它有一個(gè)直接子接口IterationTag。IT資訊交流網(wǎng) 自定義標(biāo)簽的分類分類 說明 范例 正常標(biāo)簽(Standard Tag)包含起始標(biāo)簽、標(biāo)簽體、結(jié)束標(biāo)簽 Select * from emp空標(biāo)簽(Empty Tag)沒有標(biāo)簽體,但可包含標(biāo)簽的屬性ATMjsp:ATM/嵌套標(biāo)簽(Nested Tag)自定義標(biāo)簽內(nèi)包含其他自定義標(biāo)簽 IT資訊交流網(wǎng) 開發(fā)自定義標(biāo)簽的步驟根據(jù)業(yè)務(wù)要求確定標(biāo)簽形式編寫標(biāo)簽處理器類(Tag Handler Class)編寫標(biāo)簽的描述文件tld(Tag Library Desscriptor File)web.xml文件(在其中指定tld的位置)(在s
4、ervlet2.4,jsp2.0以上的版本 不用配置此項(xiàng))JSP頁面導(dǎo)入和使用標(biāo)簽IT資訊交流網(wǎng) 自定義標(biāo)簽的執(zhí)行流程瀏覽器JSP引擎(碰到JSP文件中的標(biāo)簽指令)TLD文件標(biāo)簽處理類請求應(yīng)答查找調(diào)用處理結(jié)果IT資訊交流網(wǎng) SimpleTag接口優(yōu)點(diǎn) JSP 2.0中加入了新的創(chuàng)建自制標(biāo)記的API javax.servlet.jsp.tagext.SimpleTag,該 API定義了用來實(shí)現(xiàn)簡單標(biāo)記的接口。 1、和JSP 1.2中的已有接口不同的是,SimpleTag接口 不使用doStartTag()和doEndTag()方法,而提供了一個(gè)簡單的doTag()方法。這個(gè)方法在調(diào)用該標(biāo)記時(shí)只被
5、使用一次。而需要在一個(gè)自制標(biāo)記中實(shí)現(xiàn)的所有邏輯過程、循環(huán)和對標(biāo)記體的評估等都在這個(gè)方法中實(shí)現(xiàn)。從這個(gè)方面來講,SimpleTag可以和IterationTag達(dá)到同等的作用。但SimpleTag的方法和處理周期要簡單得多。 2、在SimpleTag中還有用來設(shè)置JSP內(nèi)容的setJspBody()和getJspBody()方法。Web容器會(huì)使用setJspBody()方法定義一個(gè)代表JSP內(nèi)容的JspFragment對象。實(shí)現(xiàn)SimpleTag標(biāo)記的程序可以在doTag方法中根據(jù)需要多次調(diào)用getJspBody().invoke()方法以處理JSP內(nèi)容。 3、對于前臺(tái)WEB頁面制作人員:在JS
6、P1.2時(shí)代,Taglib頁面調(diào)用實(shí)際上是比較復(fù)雜的,SimpleTag+EL表達(dá)式語言極大的簡化了Taglib調(diào)用,真正達(dá)到不懂JAVA的人員也可以輕松編寫 JSP頁面的目的。IT資訊交流網(wǎng) SimpleTag 接口setJspContext 方法:該方法把代表 JSP 頁面的 pageContext 對象傳遞給標(biāo)簽處理器對象。setParent 方法:該方法把父標(biāo)簽處理器對象傳遞給當(dāng)前標(biāo)簽處理器對象getParent 方法:該方法用于獲得標(biāo)簽的父標(biāo)簽處理器對象setJspBody 方法:該方法用于把代表標(biāo)簽體的 JspFragment 對象傳遞給標(biāo)簽處理器對象doTag 方法:該方法用于完
7、成所有的標(biāo)簽邏輯。該方法可以拋出 javax.servlet.jsp.SkipPageException 異常,用于通知 web 容器不再執(zhí)行 JSP 頁面中位于結(jié)束標(biāo)記后面的內(nèi)容。IT資訊交流網(wǎng) 實(shí)現(xiàn) SimpleTag 接口的標(biāo)簽處理器類的生命周期setJspContextsetParentsetXXXsetJspBodydoTag1.Jsp 引擎將代表 JSP 頁面的 pageContext 對象傳遞給標(biāo)簽處理器對象2.Jsp 引擎將父標(biāo)簽處理器 對象傳遞給當(dāng)前標(biāo)簽處理 器對象。只有存在父標(biāo)簽 時(shí),jsp 引擎才會(huì)調(diào)用該 方法3.設(shè)置標(biāo)簽屬性。只有定義 屬性才調(diào)用該方法4. 若存在標(biāo)簽體
8、, JSP 引擎將把標(biāo)簽體封裝成一個(gè) JspFragment 對象,調(diào)用 setJsddpBody 方法將 JspFragment 對象傳遞給標(biāo)簽處理器對象。若標(biāo)簽體為空,這 setJspBody 將不會(huì)被 JSP 引擎調(diào)用5.容器調(diào)用標(biāo)簽處理器對象的 doTag 方法執(zhí)行標(biāo)簽邏輯IT資訊交流網(wǎng) JspFragment 類該類的實(shí)例對象代表 JSP 頁面中的一段符合 JSP 語法規(guī)范的 JSP 片段,這段 JSP 片段不能包含 JSP 腳本元素()JSP 引擎在處理簡單標(biāo)簽的標(biāo)簽體時(shí),會(huì)把標(biāo)簽體內(nèi)容用一個(gè) JspFragment 對象表示,并調(diào)用標(biāo)簽處理器對象的 setJspBody 方法把
9、JspFragment 對象傳遞給標(biāo)簽處理器對象。得到代表標(biāo)簽體的 JspFragment 對象后,標(biāo)簽開發(fā)者就可以在標(biāo)簽處理器中根據(jù)需要調(diào)用 JspFragment 對象的方法,進(jìn)而決定如何處理標(biāo)簽體。IT資訊交流網(wǎng) JspFragment 類getJspContext 方法:該方法用于返回代表調(diào)用頁面的 JspContext 對象Invoke 方法(java.io.Writer out):該方法用于執(zhí)行 JspFragment 對象所代表的 JSP 代碼片段。在 doTag() 方法中可以根據(jù)需要調(diào)用該方法。該方法的參數(shù) out 用于指定將 JspFragment 對象的執(zhí)行結(jié)果寫入到哪個(gè)
10、輸出流對象中。若傳遞參數(shù) out 的值為 null,則將執(zhí)行結(jié)果寫入到 JspContext.geOut() 方法返回的輸出流對象中。若想在標(biāo)簽處理器中修改標(biāo)簽體內(nèi)容:需在調(diào)用 invoke 方法時(shí)指定一個(gè)可取出結(jié)果數(shù)據(jù)的輸出流對象(如:StringWriter),讓標(biāo)簽體的執(zhí)行結(jié)果輸出到該輸出流中,然后從該輸出流對象中取出數(shù)據(jù)進(jìn)行修改后再輸出到目標(biāo)設(shè)備IT資訊交流網(wǎng) SimpleTagSupport為簡化簡單標(biāo)簽處理器的編寫工作,JSP API 中提供了 SimpleTag接口的一個(gè)實(shí)現(xiàn)類SimpleTagSupport。 SimpleTagSupport實(shí)現(xiàn)了SimpleTag接口中的方法
11、,它 內(nèi)部以成員變量的形式保存了setJspContext方法和setJspBody方法傳遞進(jìn)來的參數(shù)。此外,它還定義了如 下兩個(gè)方法、來返回這兩個(gè)參數(shù):getJspContext方法:該方法用于返回代表調(diào)用頁面的JspContext對象getJspBody方法:該方法用于得到代表標(biāo)簽體的JspFragment對象,IT資訊交流網(wǎng) 標(biāo)簽庫描述文件標(biāo)簽庫描述(Tag Library Description)文件簡稱為 tld 文件,其擴(kuò)展名為 .tld多個(gè)標(biāo)簽的集合就形成了一個(gè)標(biāo)簽庫,標(biāo)簽庫中的所有標(biāo)簽都必須在標(biāo)簽文件中進(jìn)行描述Tld 文件可以放置在 web 應(yīng)用程序的 WEB-INF 目錄及其
12、子目錄中,但不能放置在 WEB-INF 目錄下的 classes 和 lib 子目錄中 。tld 文件也可以放置在 WEB-INFlib 目錄下的 jar 包的 META-INF 目錄及其子目錄中服務(wù)器啟動(dòng)時(shí)查找的順序:IT資訊交流網(wǎng) 標(biāo)簽庫描述文件:指定標(biāo)簽體的類型??赡苋≈涤?3 種:empty:沒有標(biāo)簽體scriptless:標(biāo)簽體可以包含 el 表達(dá)式和 JSP 動(dòng)作元素,但不能包含 JSP 的腳本元素tagdependent:表示標(biāo)簽體交由標(biāo)簽本身去解析處理。若指定 tagdependent,在標(biāo)簽體中的所有代碼都會(huì)原封不動(dòng)的交給標(biāo)簽處理器,而不是將執(zhí)行結(jié)果傳遞給標(biāo)簽處理器IT資訊交
13、流網(wǎng) 在 JSP 頁面引用自定義標(biāo)簽在 JSP 頁面使用 taglib 指令引入標(biāo)簽庫描述文件: uri:屬性用于指定所引入的標(biāo)簽庫描述(tld)文件中所定義的 元素的內(nèi)容;prefix 屬性用于為引入的 tld 文件指定一個(gè)”引用代號”。Prefix 屬性可以由 jsp 文件的作者任意指定,只要與其他 taglib 指令的 prefix 屬性值不同就可以。IT資訊交流網(wǎng) 自定義標(biāo)簽1定制一個(gè)標(biāo)簽, 輸出當(dāng)前的日期IT資訊交流網(wǎng) 自定義標(biāo)簽例子2定制一個(gè)帶有兩個(gè)屬性的標(biāo)簽, 用于計(jì)算并輸出兩個(gè)數(shù)的最大值IT資訊交流網(wǎng) 自定義標(biāo)簽例子itcast 0.1 core libraryitcast c
14、ore0.1itcastIT資訊交流網(wǎng) 自定義標(biāo)簽例子 maxValue com.itcast.mytag.MaxValueTag empty num1 true true IT資訊交流網(wǎng) 自定義標(biāo)簽例子3定制一個(gè)帶有三個(gè)屬性的標(biāo)簽, 用于按指定的步長輸出值 IT資訊交流網(wǎng) 自定義標(biāo)簽例子4定制一個(gè)帶有一個(gè)屬性的標(biāo)簽, 用于輸出指定文件的內(nèi)容 IT資訊交流網(wǎng) 自定義標(biāo)簽例子5定制一個(gè)帶含有標(biāo)簽體的標(biāo)簽,并把標(biāo)簽體的內(nèi)容全部輸出轉(zhuǎn)化為大寫 asdfdsfsdfghhhhhhhhhhhhhhhhttyhnfghgfh IT資訊交流網(wǎng) 自定義標(biāo)簽例子6定制一個(gè)用于迭代輸出集合(List)中所有元素的
15、標(biāo)簽: $ * $stu.age IT資訊交流網(wǎng) 自定義標(biāo)簽例子7定制一個(gè)用于迭代輸出集合(Set)中所有元素的標(biāo)簽: $ * $stu.age IT資訊交流網(wǎng) 自定義標(biāo)簽例子8定制一個(gè)用于迭代輸出數(shù)組中所有元素的標(biāo)簽: $*$stu.age IT資訊交流網(wǎng) 自定義標(biāo)簽例子9定制一個(gè)用于迭代輸出(數(shù)組、List、set)中所有元素的標(biāo)簽: List: $*$stu.age IT資訊交流網(wǎng) 自定義標(biāo)簽例子10定制一個(gè)用于迭代輸出(Map)中所有元素的標(biāo)簽: $stu.key*$stu.value*$stu.value.age*$ IT資訊交流網(wǎng) 自定義標(biāo)簽例子11定制一個(gè)用于迭代輸出(數(shù)組、Li
16、st、set、Map)中所有元素的標(biāo)簽: $*$stu.age map處理 $stu.key*$stu.value*$stu.value.age*$IT資訊交流網(wǎng) EL 自定義函數(shù)EL 自定義函數(shù):在 EL 表達(dá)式中調(diào)用的某個(gè) Java 類的靜態(tài)方法,這個(gè)靜態(tài)方法需在 web 應(yīng)用程序中進(jìn)行配置才可以被 EL 表達(dá)式調(diào)用。EL 自定義函數(shù)可以擴(kuò)展 EL 表達(dá)式的功能,讓 EL 表達(dá)式完成普通 Java 程序代碼所能完成的功能。IT資訊交流網(wǎng) EL 自定義函數(shù)開發(fā)步驟編寫 EL 自定義函數(shù)映射的Java 類中的靜態(tài)方法: 這個(gè) Java 類必須帶有 public 修飾符,方法必須是這個(gè)類的帶有
17、public 修飾符的靜態(tài)方法編寫標(biāo)簽庫描述文件(tld 文件), 在 tld 文件中描述自定義函數(shù)在 JSP 頁面中導(dǎo)入和使用自定義函數(shù)IT資訊交流網(wǎng) 在 tld 文件中描述 EL 自定義函數(shù)為了能夠讓一個(gè) Java 類的靜態(tài)方法可以被 EL 表達(dá)式調(diào)用,需要在一個(gè)標(biāo)簽庫描述文件(tld 文件)中對 EL 自定義函數(shù)進(jìn)行描述,已將 Java 類中的靜態(tài)方法映射成一個(gè) EL 自定義函數(shù)IT資訊交流網(wǎng) 在 tld 文件中描述 EL 自定義函數(shù) my el function myelfunction0.1itcastelhttp:/ toGBK cn.itcast.el.ELFunctionDef
18、ined java.lang.String toGBK(java.lang.String)IT資訊交流網(wǎng) 在 JSP 頁面中導(dǎo)入和使用 EL 自定義函數(shù)在標(biāo)準(zhǔn) JSP 頁面中使用 taglib 指令來引入 tld 文件: uri:屬性用于指定所引入的標(biāo)簽庫描述(tld)文件中所定義的 元素的內(nèi)容;prefix 屬性用于為引入的 tld 文件指定一個(gè)”引用代號”。Prefix 屬性可以由 jsp 文件的作者任意指定,只要與其他 taglib 指令的 prefix 屬性值不同就可以。調(diào)用 EL 自定義函數(shù): $itcasel:aa(param.username)IT資訊交流網(wǎng) 練習(xí)編寫 3 個(gè) E
19、L 自定義函數(shù):計(jì)算輸入字符串的長度完成對字符串的截取完成兩個(gè)數(shù)相除的功能 gbk $itcastel:toGBK(param.username) utf-8:$itcastel:toUTF8(param.username) subString -$itcastel:subString(param.username,1,4) getLength: itcastel:getLength(param.username) IT資訊交流網(wǎng) jstl fn 函數(shù) (1)為了簡化在 JSP 頁面操作字符串,JSTL 中提供了一套 EL 自定義函數(shù),這些自定義函數(shù)包含了 JSP 頁面經(jīng)常要用到的字符串操作在JSTL的表達(dá)是中要使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版農(nóng)貿(mào)場品牌形象設(shè)計(jì)合同4篇
- 2025年滬教版九年級歷史下冊月考試卷
- 2025年浙教版選擇性必修2生物下冊階段測試試卷
- 二零二五年度綠色農(nóng)業(yè)合作社股權(quán)投資合同4篇
- 二零二五年度木材產(chǎn)品出口退稅代理服務(wù)合同3篇
- 2025年度智能家居門系統(tǒng)安裝及售后服務(wù)合同范本4篇
- 二零二五年度鄉(xiāng)村旅游資源承包經(jīng)營合同4篇
- 2025年度密封膠產(chǎn)品回收與循環(huán)利用合同2篇
- 2025年度門頭房屋租賃合同附帶商業(yè)活動(dòng)策劃執(zhí)行4篇
- 2025版智能鎖與木門集成系統(tǒng)銷售合同范本4篇
- 提高靜脈留置使用率品管圈課件
- GB/T 10739-2023紙、紙板和紙漿試樣處理和試驗(yàn)的標(biāo)準(zhǔn)大氣條件
- 《心態(tài)與思維模式》課件
- 物流服務(wù)項(xiàng)目的投標(biāo)書
- C語言程序設(shè)計(jì)(慕課版 第2版)PPT完整全套教學(xué)課件
- 行業(yè)會(huì)計(jì)比較(第三版)PPT完整全套教學(xué)課件
- 值機(jī)業(yè)務(wù)與行李運(yùn)輸實(shí)務(wù)(第3版)高職PPT完整全套教學(xué)課件
- 高考英語語法填空專項(xiàng)訓(xùn)練(含解析)
- 危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化課件
- 《美的歷程》導(dǎo)讀課件
- 心電圖 (史上最完美)課件
評論
0/150
提交評論