關(guān)于JSP自定義標(biāo)簽_第1頁
關(guān)于JSP自定義標(biāo)簽_第2頁
關(guān)于JSP自定義標(biāo)簽_第3頁
關(guān)于JSP自定義標(biāo)簽_第4頁
關(guān)于JSP自定義標(biāo)簽_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 JavaEE基礎(chǔ)教程 第18章 JSP自定義標(biāo)簽18.1 JSP自定義標(biāo)簽簡介18.2 開發(fā)自定義JSP標(biāo)簽18.3 編程示例:網(wǎng)上書店返回18.1 JSP自定義標(biāo)簽簡介從JSP1.1規(guī)范開始,JSP支持在JSP文件中使用自定義標(biāo)簽(JSP CUSTOME TAG LIBRARY)。用戶可以把可重用的復(fù)雜的邏輯運(yùn)算和事務(wù)或者特定的數(shù)據(jù)表示方式定義到自定義JSP標(biāo)簽中,提高代碼的簡潔性和可重用性。自定義標(biāo)簽在功能邏輯上與JavaBean類似,都是對Java代碼的封裝。自定義標(biāo)簽是可重用的組件代碼,而JavaBean也是可重用的組件。自定義標(biāo)簽易于使用,且與XML樣式標(biāo)簽類似,允許開發(fā)人員為復(fù)雜

2、的操作提供邏輯名稱。開發(fā)自定義JSP標(biāo)簽的基本步驟如下:2022/8/112Java EE基礎(chǔ)教程(1)標(biāo)簽處理程序類:這是自定義標(biāo)簽的核心。 (2)標(biāo)簽庫的描述文件(tld文件)(3)Web應(yīng)用的web.xml文件(4)自定義標(biāo)簽的使用18.1 JSP自定義標(biāo)簽簡介2022/8/113Java EE基礎(chǔ)教程18.2.1 創(chuàng)建標(biāo)簽處理類18.2.2 創(chuàng)建標(biāo)簽庫描述文件TLD18.2.3 JSP中使用自定義標(biāo)簽18.2 開發(fā)自定義JSP標(biāo)簽返回2022/8/114Java EE基礎(chǔ)教程首先要制作一個(gè)Java類,用來告訴JSP程序遇到這個(gè)標(biāo)簽后應(yīng)該做什么。這個(gè)類必須實(shí)現(xiàn)javax.servlet.

3、jsp.tagext.Tag接口。Tagext包中有兩個(gè)類,即TagSupport和BodyTagSupport。這兩個(gè)類提供了Tag接口的默認(rèn)實(shí)現(xiàn)。在實(shí)際開發(fā)中,標(biāo)簽處理類通過繼承javax.servlet.jsp.tagext.TagSupport或javax.servlet.jsp.tagext.BodyTagSupport這兩個(gè)類,只需重新自定義那些需要自定義的行為的方法,從而簡化了標(biāo)簽處理程序的開發(fā)。 18.2.1 創(chuàng)建標(biāo)簽處理類2022/8/115Java EE基礎(chǔ)教程TagSupport與BodyTagSupport的區(qū)別主要是標(biāo)簽處理類是否需要對標(biāo)簽體處理,如果不需要處理標(biāo)簽體

4、就用TagSupport,否則就用BodyTagSupport。對標(biāo)簽體處理就是標(biāo)簽處理類要讀取標(biāo)簽體的內(nèi)容和改變標(biāo)簽體返回的內(nèi)容。用TagSupport實(shí)現(xiàn)的標(biāo)簽,都可以用BodyTagSupport來實(shí)現(xiàn),因?yàn)锽odyTagSupport繼承了TagSupport。 18.2.1 創(chuàng)建標(biāo)簽處理類2022/8/116Java EE基礎(chǔ)教程TagSupport類:實(shí)現(xiàn)了Tag和InterationTag接口。這個(gè)類支持簡單標(biāo)簽和帶主體迭代的標(biāo)簽。TagSupport類的方法如下:doStartTag():JSP頁面遇到開始標(biāo)簽時(shí)執(zhí)行。如果用戶希望在處理主體內(nèi)容和結(jié)束標(biāo)簽之前進(jìn)行其他處理,則可以

5、重寫該方法。doStartTag()的原型為:int doStartTag() throws JspExceptiondoEndTag():JSP頁面遇到結(jié)束標(biāo)簽且在執(zhí)行doStartTag()之后執(zhí)行。其語法為:int doEndTag() throws JspExceptiondoAfterBody():允許用戶有條件地重新處理標(biāo)簽的主體。在處理完標(biāo)簽的主體之后調(diào)用。如果標(biāo)簽沒有主體,則不會(huì)調(diào)用doAffterBody方法。其語法為:int doAfterBody() throws JspException18.2.1 創(chuàng)建標(biāo)簽處理類2022/8/117Java EE基礎(chǔ)教程BodyTag

6、Support類:實(shí)現(xiàn)BodyTag接口,擴(kuò)展TagSupport類。BodyTagSupport在TagSupport類的基礎(chǔ)上又增加了以下兩個(gè)方法:setBodyContent():設(shè)置標(biāo)簽體的內(nèi)容。在執(zhí)行doInitBody()方法之前執(zhí)行此方法。其語法為:void setBodyContent(BodyContent bc)doInitBody():用于準(zhǔn)備處理頁面主體。在setBodyContent()方法之后被調(diào)用。其語法為:void doInitBody() throws JspException18.2.1 創(chuàng)建標(biāo)簽處理類2022/8/118Java EE基礎(chǔ)教程初始化doSt

7、artTag()doEndTag()Release()結(jié)束返回值setBodyContent()doInitBody()doAfterBody()返回值EVAL_BODY_BUFFEREDEVAL_BODY_INCLUDE SKIP_BODYEVAL_BODY_AGAINSKIP_BODYEVAL_PAGE SKIP_PAGE18.2.1 創(chuàng)建標(biāo)簽處理類 BodyTagSupport類的方法執(zhí)行過程流程圖 2022/8/119Java EE基礎(chǔ)教程從流程圖可以看出,是否對標(biāo)簽體進(jìn)行處理是由doStartTag()方法返回值決定的。如果doStartTag()方法返回EVAL_BODY_BUFF

8、ERED則處理標(biāo)簽體,否則執(zhí)行doEndTag()方法。下面以生成一個(gè)隨機(jī)驗(yàn)證碼的標(biāo)簽為例,說明如何創(chuàng)建自定義標(biāo)簽。例18-1創(chuàng)建一個(gè)自定義標(biāo)簽,此標(biāo)簽產(chǎn)生隨機(jī)驗(yàn)證碼。程序清單:自定義標(biāo)簽處理類ch18IdentifyingTag.java18.2.1 創(chuàng)建標(biāo)簽處理類2022/8/1110Java EE基礎(chǔ)教程這個(gè)標(biāo)簽處理類繼承自BodyTagSupport類,由于此標(biāo)簽功能較簡單,只是重寫了doStartTag()方法,而沒有對標(biāo)簽體內(nèi)容的處理。在doStartTag()方法中調(diào)用Random類的實(shí)例生成一個(gè)4位數(shù)的隨機(jī)數(shù),并通過pageContext對象獲得輸出流,將隨機(jī)數(shù)輸出到頁面上 1

9、8.2.1 創(chuàng)建標(biāo)簽處理類2022/8/1111Java EE基礎(chǔ)教程TLD文件是一個(gè)XML文件,為JSP引擎提供有關(guān)自定義標(biāo)簽及其實(shí)現(xiàn)位置的元信息。TLD文件必須以擴(kuò)展名.tld為后綴,文件保存在WEB-INF目錄或它的子目錄中。TLD文件可以有多個(gè)元素,其中主要的有3大類:taglib:標(biāo)簽庫元素,是TLD文件的根元素;tag:標(biāo)簽元素,用于定義標(biāo)簽庫中某個(gè)具體的標(biāo)簽;attribute:屬性元素,指定某個(gè)標(biāo)簽的屬性。例18-2 隨機(jī)驗(yàn)證碼的TLD文件identifying.tld。程序清單:WEB-INFidentifying.tld18.2.2 創(chuàng)建標(biāo)簽庫描述文件TLD2022/8/1

10、112Java EE基礎(chǔ)教程已經(jīng)定義好了標(biāo)簽處理類和標(biāo)簽庫描述文件以后,就可以在JSP文件中使用自定義標(biāo)簽了。例 18-3 在JSP頁面中調(diào)用自定義標(biāo)簽顯示驗(yàn)證碼。程序清單:ch18tagExample.jsp18.2.3 JSP中使用自定義標(biāo)簽2022/8/1113Java EE基礎(chǔ)教程18.3.1 分頁標(biāo)簽處理類18.3.2 分頁標(biāo)簽庫描述文件18.3.3 使用分頁標(biāo)簽18.3 編程示例:網(wǎng)上書店返回2022/8/1114Java EE基礎(chǔ)教程創(chuàng)建標(biāo)簽處理類之前需要一個(gè)輔助的JavaBean,用這個(gè)JavaBean存放有關(guān)分頁每一頁的相關(guān)信息,如一共有多少條記錄、一共有多少頁、當(dāng)前是第幾頁

11、、每頁有多少條記錄等信息。程序清單:ch18PageResult.java18.3.1 分頁標(biāo)簽處理類2022/8/1115Java EE基礎(chǔ)教程程序清單:ch18PaginationTag.javaPaginationTag簽處理類繼承了TagSupport,而pageContext屬性是在TagSupport中定義的,所以在類中可以直接使用這個(gè)對象。pageResult=(PageResult) pageContext.getRequest().getAttribute(pageResult);pageContext是上文對象,通過這個(gè)對象可以獲取封裝在請求對象中的信息pageResult對象。這個(gè)pageResult對象是在下面的ToViewBook這個(gè)Servlet中保存在request對象中的。只要得到pageResult對象,就可以獲得有關(guān)分頁的所有信息。 18.3.1 分頁標(biāo)簽處理類2022/8/1116Java EE基礎(chǔ)教程在使用這個(gè)標(biāo)簽類時(shí)要注意,標(biāo)簽一定要放在一個(gè)表單form中。因?yàn)樵邳c(diǎn)擊“上一頁”或“下一頁”的鏈接時(shí)實(shí)際上是提交一個(gè)請求,這個(gè)請求提交給了所在form的action所指向的服務(wù)器處理程序。 18.3.1 分頁標(biāo)簽處理類2022/8/1117Java EE基礎(chǔ)教程標(biāo)簽庫描述文件對標(biāo)簽處理類和標(biāo)簽之間建立映射關(guān)系,這樣在JSP頁面中

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論