輕松學(xué)Java Web開發(fā)之用戶自定義標(biāo)簽_第1頁
輕松學(xué)Java Web開發(fā)之用戶自定義標(biāo)簽_第2頁
輕松學(xué)Java Web開發(fā)之用戶自定義標(biāo)簽_第3頁
輕松學(xué)Java Web開發(fā)之用戶自定義標(biāo)簽_第4頁
輕松學(xué)Java Web開發(fā)之用戶自定義標(biāo)簽_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章 用戶自定義標(biāo)簽JSP自定義標(biāo)簽是用戶定義的JSP語言元素,可以看成是一種通過標(biāo)簽處理器生成基于XML腳本的方法。自定義標(biāo)簽在功能上和邏輯上都與JavaBean類似,都是一組可重用的組件代碼。相較于JavaBean,自定義標(biāo)簽可以使Web開發(fā)者可以完全從Java編程中脫離開來,專注于頁面顯示和格式上面去,所以具有廣闊的發(fā)展前景。本章我們就為大家來講解有關(guān)用戶自定義標(biāo)簽的知識。16.1 自定義標(biāo)簽概述在第4章中我們講解了JavaBean,知道JSP專門提供了3個動作指令來調(diào)用JavaBean組件,簡化JSP頁面的開發(fā)和維護。但是,這遠遠不能滿足實際開發(fā)的需要。因此,在JSP技術(shù)中提供了一種

2、新的封裝動態(tài)功能的機制,這就是用戶自定義標(biāo)簽。26.1.1 自定義標(biāo)簽的構(gòu)成一個自定義標(biāo)簽一般由JavaBean、標(biāo)簽庫描述、標(biāo)簽處理器、web.xml文件配置、標(biāo)簽庫聲明等元素所構(gòu)成。它們的作用如圖6.1所示。JavaBean、web.xml文件配置比較簡單。以下僅對標(biāo)簽庫聲明、標(biāo)簽庫描述和標(biāo)簽處理器進行簡要介紹。36.1.2 自定義標(biāo)簽聲明我們在第2章中介紹過taglib指令。該指令就是當(dāng)JSP頁面中引用自定義標(biāo)簽時,用來在頁面上對自定義標(biāo)簽進行聲明的。taglib編譯指令的作用主要是定義一個標(biāo)簽庫路徑及其前綴。taglib指令的語法格式如圖6.2所示。注意:無論JSP頁面中的自定義標(biāo)簽出

3、現(xiàn)在什么位置,taglib指令都必須出現(xiàn)在頁面的前端位置。46.1.3 標(biāo)簽庫描述符文件標(biāo)簽庫描述符(TLD文件)是一個描述標(biāo)簽庫的XML文檔。TLD包含有關(guān)整個庫以及庫中包含的每一個標(biāo)簽的信息。它把自定義標(biāo)簽與對應(yīng)的處理程序關(guān)聯(lián)起來。TLD文件名稱必須擴展名為.tld。TLD文件存儲在Web模塊的WEB-INF目錄下或者子目錄下,并且一個標(biāo)簽庫要對應(yīng)一個標(biāo)簽庫描述文件,而在一個描述文件中可以包含多個自定義標(biāo)簽的聲明。標(biāo)簽庫描述符文件的根元素是,該元素下包含如表6.1所示的子元素。元素說明元素說明用于設(shè)置標(biāo)簽庫版本用于設(shè)置標(biāo)簽庫的可選小圖標(biāo)用于設(shè)置標(biāo)簽庫要求的JSP規(guī)范版本用于設(shè)置標(biāo)簽庫的可選

4、大圖標(biāo)用于設(shè)置該標(biāo)簽庫的助記名用于設(shè)置標(biāo)簽庫的描述信息唯一標(biāo)識該標(biāo)簽庫的URI用于設(shè)置標(biāo)簽庫的監(jiān)聽器類用于設(shè)置標(biāo)簽庫顯示的可選名用于設(shè)置標(biāo)簽庫的具體標(biāo)簽56.1.3 標(biāo)簽庫描述符文件通過表6.1我們可以看出,元素中大部分子元素都是對標(biāo)簽庫的一些基本屬性或者顯示的名稱或圖表的設(shè)定,并不具備實際意義。真正用來查找標(biāo)簽庫中具體標(biāo)簽的是元素。元素也包括子元素,其具體說明如表6.2所示。元素說明元素說明用于設(shè)置標(biāo)簽的唯一名稱用于設(shè)置標(biāo)簽的可選小圖標(biāo)用于設(shè)置標(biāo)簽處理器的完全限定名用于設(shè)置標(biāo)簽的可選大圖標(biāo)用于設(shè)置腳本變量信息的子類名稱用于設(shè)置標(biāo)簽的描述信息用于設(shè)置標(biāo)簽的正文內(nèi)容類型用于設(shè)置標(biāo)簽的腳本變量信息

5、用于設(shè)置標(biāo)簽顯示的可選名用于設(shè)置標(biāo)簽的屬性信息66.1.4 標(biāo)簽處理器把自定義標(biāo)簽的主體和屬性轉(zhuǎn)變?yōu)镠TML代碼的實際工作,是由標(biāo)簽處理器來完成的。標(biāo)簽處理器也叫標(biāo)簽處理類,它是一個Java類。當(dāng)JSP容器編譯自定義標(biāo)簽時,就會需要使用標(biāo)簽處理器類的實例。標(biāo)簽處理器雖然是一個Java類,但不僅僅是一個普通的Java類,在定義時需要滿足特殊的要求。開發(fā)的標(biāo)簽處理類必須實現(xiàn)Tag或者BodyTag接口類(它們包為javax.servlet.jsp.tagext)。BodyTag接口是繼承了Tag接口的子接口。如果創(chuàng)建的自定義標(biāo)簽不帶體式,可以實現(xiàn)Tag接口,但是如果創(chuàng)建的自定義標(biāo)簽帶體,則需要實現(xiàn)

6、BodyTag接口。76.1.4 標(biāo)簽處理器Tag接口類中所定義的方法如表6.3所示。BodyTag子接口類又重新定義了兩個新方法,如表6.4所示。方法名方法描述setPageContext(PageContext pc)設(shè)置當(dāng)前頁面的上下文setParent(Tag t)設(shè)置這個標(biāo)簽處理類的父類getParent()獲得父類doStartTag()處理這個實例中的開發(fā)標(biāo)簽doEndTag()處理這個實例中的結(jié)束標(biāo)簽release()由標(biāo)簽處理類引起,來釋放狀態(tài)方法名方法描述setBodyContent(BodyContent b)為體中代碼作初始化doInitBody()為標(biāo)簽體中的內(nèi)容設(shè)置

7、屬性86.1.4 標(biāo)簽處理器在標(biāo)簽處理器中定義了標(biāo)簽處理方法doStartTag()和doEndTag(),這兩個方法分別在標(biāo)簽開始和結(jié)束時執(zhí)行處理和輸出動作。這兩個方法都要求分別返回一個狀態(tài)碼,通知JSP容器歲自定義標(biāo)簽的處理結(jié)果及整個JSP頁面的運行狀態(tài)。狀態(tài)碼一共有四種,具體作用如圖6.3所示。96.1.4 標(biāo)簽處理器標(biāo)簽處理器也有其生命周期,其大致可以分為5個階段,如圖6.4所示。106.1.4 標(biāo)簽處理器下面我們就在自定義標(biāo)簽的基本概念描述的基礎(chǔ)上,列舉一系列的自定義標(biāo)簽開發(fā)的實例,來教會讀者如何開發(fā)各類自定義標(biāo)簽。116.2 簡單格式的標(biāo)簽開發(fā)簡單格式的標(biāo)簽沒有屬性和體,它必須實現(xiàn)

8、Tag接口中的doStartTag()和doEndTag()方法。當(dāng)Web容器遇到開始標(biāo)簽時會自動調(diào)用doStartTag()方法。由于簡單格式的標(biāo)簽沒有體,所以這個方法會直接返回一個SKIP_BODY。在遇到結(jié)束標(biāo)簽的時候會調(diào)用doEndTag()方法。如果還需要頁面中的其他部分進行判斷,則doEndTag()方法會返回EVAL_PAGE,否則,會返回SKIP_PAGE。126.3 自定義帶有屬性的標(biāo)簽自定義標(biāo)簽可以有自己的屬性。屬性一般在開始標(biāo)記中定義,語法為attr=value。而且對于每個value屬性,還需要在這個標(biāo)簽相對應(yīng)的處理類中定義一個屬性的set()和get()方法。136.

9、4 自定義帶有體的標(biāo)簽之前我們定義的標(biāo)簽都是不帶體的,接下來我們看如何創(chuàng)建一個帶體的標(biāo)簽。一個自定義標(biāo)簽可以包含其他自定義標(biāo)簽、腳本變量、HTML標(biāo)記或其他內(nèi)容。而且其必須繼承javax.servlet.jsp.tagext.BodyTagSupport類,實現(xiàn)其中的doInitBody()和doAfterBody()方法。這兩種方法的說明如表6.5所示。方法名方法描述doInitBody()方法用這個方法執(zhí)行所有依賴于正文內(nèi)容的初始化,對正文內(nèi)容進行判斷之前調(diào)用doAfterBody()方法返回指明是否繼續(xù)判斷體中正文內(nèi)容的指示,在判斷了正文內(nèi)容之后調(diào)用146.5 自定義嵌套標(biāo)簽到目前為止,我們創(chuàng)建的標(biāo)簽都是單個的標(biāo)簽,也是被單獨的應(yīng)用在JSP頁面中。而在實際開發(fā)中,往往需要通過多個標(biāo)簽來實現(xiàn)特定的功能,這樣的標(biāo)簽就存在嵌套關(guān)系。存在嵌套關(guān)系的標(biāo)簽也可以被稱為父子標(biāo)簽,一個父標(biāo)簽可以嵌套多個子標(biāo)簽、HTML和Java片段代碼。156.6 小結(jié)本章主要講解了JSP自定義標(biāo)簽的基本開發(fā)流程

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論