心得10--jsp自訂標籤介紹__js

來源:互聯網
上載者:User

1.  自訂JSP標籤概述

自訂JSP標籤就是程式員定義的一種JSP標籤,這種標籤把那些資訊顯示邏輯封裝在一個單獨的Java類中,通過一個XML檔案來描述它的使用。當頁面中需要使用類似的顯示邏輯時,就可以在頁面中插入這個標籤,從而完成相應的功能。使用自訂標籤,可以分離程式邏輯和表示邏輯,將Java代碼從HTML中剝離,便於美工維護頁面;自訂標籤也提供了可重用的功能組件,能夠提高工程的開發效率。

自訂標籤主要用於移除Jsp頁面中的java代碼

2.  自訂JSP標籤的執行過程

當一個含有自訂標籤的JSP頁面被JSP引擎(Web容器)轉譯成Servlet時,JSP引擎遇到自訂的標籤,會把這個自訂標籤轉化成對一個稱為“標籤處理類”的調用。之後,當這個JSP頁面被執行時,JSP引擎就會調用這個“標籤處理類”對象,並執行其內部定義的相應操作方法,從而完成相應的功能。

自訂JSP標籤的開發流程

使用Java處理類來開發自訂JSP標籤時,主要分為下幾個步驟。

–       建立標籤的處理類(Tag Handle Class)。這個類實現Tag介面,用來定義標籤的行為,並在JSP引擎遇到自訂標籤時調用執行。

–       建立標籤庫描述 (tld) 檔案(Tag Library Descriptor File),在tld檔案中對標籤處理器類進行描述。

–       在JSP檔案中用taglib指令引入標籤庫,然後使用標籤庫描述檔案中指定的標籤名來使用它。

3.  Tag介面的執行流程

JSP引擎將遇到自訂標籤時,首先建立標籤處理器類的執行個體對象,然後按照JSP規範定義的通訊規則依次調用它的方法。

   1)、public void setPageContext(PageContext pc), JSP引擎執行個體化標籤處理器後,將調用setPageContext方法將JSP頁面的pageContext對象傳遞給標籤處理器,標籤處理器以後可以通過這個pageContext對象與JSP頁面進行通訊。

   2)、public void setParent(Tag t),setPageContext方法執行完後,WEB容器接著調用的setParent方法將當前標籤的父標籤傳遞給當前標籤處理器,如果當前標籤沒有父標籤,則傳遞給setParent方法的參數值為null。

   3)、public int doStartTag(),調用了setPageContext方法和setParent方法之後,WEB容器執行到自訂標籤的開始標記時,就會調用標籤處理器的doStartTag方法。

   4)、public int doEndTag(),WEB容器執行完自訂標籤的標籤體後,就會接著去執行自訂標籤的結束標記,此時,WEB容器會去調用標籤處理器的doEndTag方法。

   5)、public void release(),通常WEB容器執行完自訂標籤後,標籤處理器會駐留在記憶體中,為其它請求伺服器,直至停止web應用時,web容器才會調用release方法。

4.  JSP標籤API

•         JSP 1.1和1.2規範中常用的介面主要有以下3個。

–       Tag:此介面定義對於所有標籤處理類都需要實現的方法。

–       IterationTag:此介面擴充了Tag介面,增加了控制重複執列標籤主體的方法。

–       BodyTag:此介面擴充了IterationTag介面,並增加了訪問和操作標籤主體內容的方法。

5. 標籤庫描述符

標籤庫描述符檔案是一個以“.tld”結尾的標準XML文檔,用來記錄一個標籤庫內擁有哪些標籤、每個標籤包含哪些屬性。

以下是一個JSP 2.0規範的標籤庫描述檔案的內容:<taglib>元素是標籤庫描述符的根項目,它包含12個子項目,詳細介紹如下,(粗體元素是常用元素,記住)。

–       (1)<description>:標籤庫的一個文本描述。

–       (2)<tlib-version>:指定標籤庫的版本。

–       (3)<short-name>:為標籤定義簡短的名字,在taglib指令中可作為首選的首碼名使用。

–       (4)<uri>:定義一個URI,用於唯一地標識此標籤庫。

–       (5)<tag>:用於指定自訂標籤的相關資訊。

–       (6)<display-name>:為標籤庫指定一個簡短的別名

–       (7)<small-icon>:為標籤庫指定大小為16×16的小表徵圖(gif或jpeg格式),該表徵圖可在圖形介面工具中顯示。

–       (8)<large-icon>:為標籤庫指定大小為32×32的大表徵圖(gif或jpeg格式),該表徵圖可在圖形介面工具中顯示。

–       (9)<validator>:為標籤庫提供一個驗證器。

–       (10)<listener>:為標籤庫提供一個監聽器。

–       (11)<tag-file>:用於描述標籤檔案。

–       (12)<function>:用於指定在運算式語言中使用的函數。

6.  傳統標籤的開發

在開發傳統標籤之前,需要瞭解清楚兩個支援類(TagSupport和BodyTagSupport)的生命週期。

TagSupport類的生命週期可以用圖來表示

BodyTagSupport類的生命週期可以用圖來表示

7.  用BodyTagSupport類開發自訂標籤

•         BodyTagSupport類中增加了兩個方法:

–       setBodyContent(BodyContent bc):容器在執行這個標籤處理類的執行個體時,將調用該方法,把標籤主體返回的內容緩衝在BodyContent類的執行個體中。BodyContent除了從父類JspWriter繼承提供用於向響應體中寫入文本的方法,還提供了用於擷取它緩衝的標籤體內容。

–       doInitBody():計算標籤主體之前調用該方法進行初始化共,可以向bodyContent對象中寫入初始內容,這些內容會放置在標籤主體內容之前。

•         BodyContent類專門用於緩衝標籤主體返回的內容,包括靜態文本以及由嵌套標籤或指令碼元素所建立的動態內容。

  傳統的自訂標籤的作用或應用

–       控制jsp頁面某一部分內容是否執行。

–       控制整個jsp頁面是否執行。

–       控制jsp頁面內容重複執行。

–       修改jsp頁面內容輸出。

•         自訂標籤除了可以移除jsp頁面java代碼外,它也可以實現以上功能。

•         tld檔案中的四種標籤體類型

–       EMPTY  JSP  scriptless  tagdepentend

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.