全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)常見(jiàn)問(wèn)題正文

自定義標(biāo)簽的開(kāi)發(fā)步驟是什么?

更新時(shí)間:2024-02-29 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  前面我們已經(jīng)學(xué)習(xí)了自定義標(biāo)簽的基本知識(shí),接下來(lái)講解如何開(kāi)發(fā)一個(gè)自定義標(biāo)簽。開(kāi)發(fā)一個(gè)自定義標(biāo)簽至少需要三個(gè)步驟,具體如下。

  1.編寫(xiě)標(biāo)簽處理器

  開(kāi)發(fā)自定義標(biāo)簽的核心任務(wù)就是要編寫(xiě)作為標(biāo)簽處理器的Java類(lèi)。

  (1)傳統(tǒng)標(biāo)簽開(kāi)發(fā),需要實(shí)現(xiàn)javax.servlet.jsp.tagext.Tag接口。

  (2)簡(jiǎn)單標(biāo)簽開(kāi)發(fā),需要實(shí)現(xiàn)javax.servlet.jsp.tagext.SimpleTag接口。

  Tag接口和SimpleTag接口定義了JSP頁(yè)面與標(biāo)簽處理器類(lèi)之間的通信規(guī)則。如果JSP引擎在編譯JSP頁(yè)面時(shí)遇到自定義標(biāo)簽,傳統(tǒng)標(biāo)簽將會(huì)調(diào)用標(biāo)簽處理器類(lèi)的doStartTag()方法,簡(jiǎn)單標(biāo)簽將會(huì)調(diào)用標(biāo)簽處理器類(lèi)的doTag()方法。

  2.編寫(xiě)標(biāo)簽庫(kù)描述符文件

  要想讓JSP引擎在遇到自定義標(biāo)簽時(shí),能找到對(duì)應(yīng)的標(biāo)簽處理器類(lèi),還必須編寫(xiě)一個(gè)標(biāo)簽庫(kù)描述符(Tag Library Descriptor)文件,簡(jiǎn)稱(chēng)TLD文件。TLD文件與標(biāo)簽處理器之間的關(guān)系就如同web.xml文件與Servlet之間的關(guān)系,一個(gè)標(biāo)簽處理器類(lèi)要想被JSP容器找到并調(diào)用,必須在TLD文件中進(jìn)行注冊(cè),一個(gè)TLD文件中可以注冊(cè)多個(gè)標(biāo)簽處理器類(lèi),每個(gè)自定義標(biāo)簽的注冊(cè)名稱(chēng)不能相同,同一個(gè)TLD文件中注冊(cè)的多個(gè)標(biāo)簽處理器類(lèi)就形成了一個(gè)自定義標(biāo)簽庫(kù)。TLD文件是基于XML文件的,其內(nèi)容的編寫(xiě)需要遵循XML語(yǔ)法規(guī)范。

  下面編寫(xiě)一個(gè)名為mytag.tld的標(biāo)簽庫(kù)描述符文件,具體示例如下。

<? xml version="1.0" encoding="GBK" ?>
<!--自定義標(biāo)簽的根標(biāo)簽是<taglib>,根標(biāo)簽使用的是schema約束,根標(biāo)簽的屬性及其取值,
通常是固定不變的-->
<taglib xmlns="
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!--TLD的頭文件,這部分信息通常是固定不變的-->
    <!--指定標(biāo)簽庫(kù)的版本號(hào)-->
    <tlib-version>1.0</tlib-version>
    <!--指定標(biāo)簽庫(kù)的名稱(chēng)-->
    <short-name>SimpleTag</short-name>
    <!--指定標(biāo)簽庫(kù)的URI-->
    <uri>http://www.itcast.cn</uri>
    <!--注冊(cè)一個(gè)自定義的標(biāo)簽-->
    <tag>
        <!--指定自定義標(biāo)簽的注冊(cè)名稱(chēng)-->
        <name>ipTag</name>
        <!--指定標(biāo)簽的標(biāo)簽處理器類(lèi)-->
        <tag-class>cn.itcast.chapter09.tag.ipTag</tag-class>
        <!--指定標(biāo)簽體的類(lèi)型,empty表示標(biāo)簽體為空-->
        <body-content>empty</body-content>
    </tag>
</taglib>

  在上述tld文件中,通過(guò)注釋的方式為每個(gè)元素進(jìn)行了說(shuō)明。

  本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

  作者:黑馬程序員Java培訓(xùn)學(xué)院

  首發(fā):https://java.itheima.com

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!