天天看點

JSP自定義标簽必知必會

自定義标簽技術自sun公司釋出以來,便一向很受歡迎!下面我就來談一談如何實作自定義标簽,以及如何使用自定義标簽。

首先我們應該知道原理,不管是标簽還是JSP,本身實際上都會被JSP Complier翻譯成Servlet,然後才會被執行。那麼在Java這門面向對象的語言中,标簽就應該是一個特殊的類。之是以說它特殊,僅僅是它出現的地方,以及實作的功能與我們平時見到的普通的類有些不一樣罷了。我們完全可以将标簽視為一個簡單的java類。就是這樣!下面我們就來看一看要怎麼寫出這樣一個類吧

首先這個類要實作一個特殊的接口,那就是Tag接口,實作裡面的方法。

在WEB-INF目錄下建立一個tld檔案,名稱随意,然後按照相關的xml限制進行聲明即可

在需要引入的jsp頁面添加指令<code>&lt;%@ taglib uri="/summer" prefix="summer"%&gt;</code>,然後我們就可以使用自定義的标簽了。

實作的步驟就是這樣,下面我們一起來看一個小例子吧,這樣印象會更加的深刻!

首先是建立一個實作了Tag接口的實作類:

再是在tld檔案中進行聲明:

注意:<code>裡面的uri是一個命名空間,可以自定義,随意設定,但是在需要引用的jsp頁面上需要一緻,這樣才能獲得自定義的标簽使用</code>

最後是在頁面上引用自定義标簽:

測試結果:

JSP自定義标簽必知必會

自定義标簽可以實作如下功能:

控制jsp頁面某一部分(一般認為是标簽體)是否執行(編寫一個實作了Tag接口的類,控制doStartTag方法的傳回值,Tag.EVAL_BODY_INCLUDE時執行标簽體,傳回Tag.SKIP_BODY時不執行标簽體)

控制整個頁面是否執行(編寫一個實作Tag接口的類,控制doStartTag方法的傳回值,傳回Tag.EVAL_PAGE,則執行下面的jsp頁面,傳回Tag.SKIP_PAGE則不執行後續的jsp頁面,如果設定在頁面頭部,則伺服器不會向浏覽器發送jsp頁面)

控制标簽頁面标簽内容重複執行(編寫一個實作IterationTag接口的實作類,控制doAfterBody方法的傳回值,傳回值為BodyTag.EVAL_BODY_AGAIN時重複執行,一直到該方法的傳回值為BodyTag.SKIP_PAGE時停止重複執行)

修改jsp标簽内容再輸出(需要編寫一個實作BodyTag接口的實作類,然後控制doStartTag,控制傳回值為BodyTag.EVAL_BODY_BUFFERED時,就可以在doEndTag 方法中獲得bodyContent對象的執行個體,這一切由complier來執行。然後就可以實作自己的邏輯了)。

下面來看一個小例子吧。

第一步,編寫實作了BodyTag接口的實作類:

第二步:在tld檔案中進行聲明,相關資訊:

第三步:在jsp頁面添加引用。

JSP自定義标簽必知必會

總結:

官方文檔對這些方法的調用過程及使用方法做了詳細的介紹,應該對文檔熟練閱讀并了解

代碼邏輯很清晰,按照流程就不容易出錯

自定義标簽的出現便是為了消除jsp頁面中的java代碼,應學會其與el表達式的配合!