程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> jsp自定義標簽介紹

jsp自定義標簽介紹

編輯:關於JSP

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved