飛艷小屋

          程序--人生--哲學(xué)___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(85)

          隨筆檔案(52)

          文章分類(157)

          文章檔案(174)

          相冊(cè)

          .NET方面的網(wǎng)站

          常上的網(wǎng)站

          建網(wǎng)站用的網(wǎng)站

          有關(guān)java的技術(shù)網(wǎng)站

          真正能用得上的網(wǎng)頁空間

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          jsp自定義標(biāo)簽

          關(guān)鍵詞jsp自定義標(biāo)簽 ?? ??????????????????????????????????????

          定義標(biāo)簽

          要定義標(biāo)簽,需要:

          ·? 為該標(biāo)簽開發(fā)一個(gè)tag handler和helper類

          ·? 在標(biāo)簽庫描述符中聲明這個(gè)標(biāo)簽

          本節(jié)描述標(biāo)簽handler和TLD的屬性,并解釋如何為在前面幾節(jié)中介紹的標(biāo)簽開發(fā)tag handler和庫描述符元素。

          標(biāo)簽handler

          標(biāo)簽handler是由Web容器調(diào)用的一個(gè)對(duì)象,用于執(zhí)行帶有自定義標(biāo)簽的JSP頁面時(shí)對(duì)這個(gè)標(biāo)簽進(jìn)行判斷。標(biāo)簽handler必須實(shí)現(xiàn)Tag或者BodyTag接口。接口可以用于接受現(xiàn)有Java對(duì)象并使它成為標(biāo)簽handler。對(duì)于新創(chuàng)建的處理器,可以用TagSupportBodyTagSupport類作為基類。這些類和接口包含在javax.servlet.jsp.tagext包中。

          JSP頁面的servlet在對(duì)標(biāo)簽處理的不同階段調(diào)用由Tag和BodyTag接口定義的標(biāo)簽handler。遇到自定義標(biāo)簽的開始標(biāo)簽時(shí),JSP頁面的servlet調(diào)用方法以初始化相應(yīng)的handler,然后調(diào)用handler的doStartTag方法。遇到自定義標(biāo)簽的結(jié)束標(biāo)簽時(shí),調(diào)用處理器的doEndTag方法。在標(biāo)簽handler需要與標(biāo)簽的正文交互時(shí)調(diào)用其他方法,見帶正文的標(biāo)簽。為了提供標(biāo)簽handler的實(shí)現(xiàn),必須實(shí)現(xiàn)在處理標(biāo)簽的不同階段調(diào)用的方法,在表16-1中匯總了這些方法。

          16-1標(biāo)簽handler方法

          標(biāo)簽handler類型

          方法

          簡單

          doStartTag, doEndTag, release

          屬性

          doStartTag, doEndTag, set/getAttribute1...N, release

          正文、判斷且無交互

          doStartTag, doEndTag, release

          正文、迭代判斷

          doStartTag, doAfterBody, doEndTag, release

          正文、交互

          doStartTag, doEndTag, release, doInitBody, doAfterBody, release

          標(biāo)簽handler可以使用一個(gè)能讓它得以與JSP頁面通信的API。到API的入口點(diǎn)是頁面上下文對(duì)象(javax.servlet.jsp.PageContext),通過它標(biāo)簽handler可以獲取JSP頁面能夠訪問的所有其他隱式對(duì)象(請(qǐng)求、會(huì)話和應(yīng)用程序)。

          隱式對(duì)象可以有與其相關(guān)聯(lián)的命名屬性。可以用[set|get]Attribute方法訪問這種屬性。

          如果標(biāo)簽是嵌入的,標(biāo)簽handler還可以訪問與外圍標(biāo)簽關(guān)聯(lián)的handler稱為parent)。

          一組相關(guān)的標(biāo)簽handler類(標(biāo)簽庫)一般是打包的且作為JAR文檔部署。

          標(biāo)簽庫描述符

          標(biāo)簽庫描述符(TLD)是一個(gè)描述標(biāo)簽庫的XML文檔。TLD包含有關(guān)整個(gè)庫以及庫中包含的每一個(gè)標(biāo)簽的信息。Web容器用TLD驗(yàn)證標(biāo)簽,JSP頁面開發(fā)工具也使用TLD。

          TLD文件名必須有擴(kuò)展名.tld。TLD文件也儲(chǔ)存在WAR文件的WEB-INF目錄中或者在WEB-INF的子目錄中。

          TLD必須以指定XML的版本和文檔類型定義(DTD)的XML文檔序言(prolog)開始。

          <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

          Tomcat支持版本 1.1和1.2的DTD。不過,本章所討論的是1.2版本,因?yàn)樵陂_發(fā)的所有標(biāo)簽庫中都應(yīng)該使用最新的版本。模板庫TLDtutorial-template.tld符合版本1.2。Struts庫TLD符合版本1.1的DTD,它的元素要少,且其中一些元素使用了稍微不同的名字。

          TLD的根是taglib元素。表16-2中列出了taglib的子元素:

          16-2 taglib子子元素?

          元素

          說明

          tlib-version

          標(biāo)簽庫的版本

          jsp-version

          這個(gè)標(biāo)簽庫要求的JSP規(guī)范版本

          short-name

          JSP頁面編寫工具可以用來創(chuàng)建助記名的可選名字

          uri

          唯一標(biāo)識(shí)該標(biāo)簽庫的的URI

          display-name

          將由工具顯示的可選名

          small-icon

          將由工具使用的可選小圖標(biāo)

          large-icon

          可被工具使用的可選大圖標(biāo)

          description

          可選的標(biāo)簽特定信息

          listener

          listener元素

          tag

          tag元素

          ?

          listener元素

          標(biāo)簽庫可以指定一些事件監(jiān)聽器類(見處理Servlet生命周期事件)。這些監(jiān)聽器在TLD中作為listener元素列出,Web容器將初始化監(jiān)聽器類并以類似在WAR級(jí)定義的監(jiān)聽器的方式注冊(cè)它們。與WAR級(jí)監(jiān)聽器不同,這里沒有指定標(biāo)簽庫監(jiān)聽器注冊(cè)的順序。listener元素的唯一子元素是listener-class元素,它必須包含監(jiān)聽類的完全限定名。

          tag元素

          庫中的每一個(gè)標(biāo)簽都由給出其名字和其標(biāo)簽handler的類、在由標(biāo)簽創(chuàng)建的腳本變量上的信息以及標(biāo)簽屬性上的信息描述。腳本變量信息可以在TLD中直接給出,也可以通過tag extra info類給出(見定義腳本變量的標(biāo)簽)。每一個(gè)屬性聲明包含指明屬性是否是必需的、其值是否可以由請(qǐng)求時(shí)表達(dá)式確定以及屬性類型的內(nèi)容(見屬性元素)。

          在tag元素中的TLD中指定標(biāo)簽。在表16-3中出了tag的子元素:

          16-3 標(biāo)簽子元素

          元素

          說明

          name

          唯一標(biāo)簽名

          tag-class

          標(biāo)簽handler類的完全限定名

          tei-class

          javax.servlet.jsp.tagext.TagExtraInfo的可選子類。見提供有關(guān)腳本變量的信息

          body-content

          正文內(nèi)容類型。見body-conten元素body-content元素

          display-name

          由工具顯示的可選名

          small-icon

          可以由工具使用的小圖標(biāo)

          large-icon

          可以由工具使用的大圖標(biāo)

          description

          可選的標(biāo)簽特定的信息

          variable

          可選的腳本變量信息。見提供有關(guān)腳本變量的信息

          attribute

          標(biāo)簽屬性信息。見Attribute 元素

          下面幾節(jié)描述開發(fā)在標(biāo)簽類型中介紹的每一種類型的標(biāo)簽所需要的方法和TLD。

          簡單標(biāo)簽

          標(biāo)簽handler

          簡單標(biāo)簽的handler必須實(shí)現(xiàn)Tag接口的doStartTag和doEndTag方法。在遇到開始標(biāo)簽時(shí)調(diào)用doStartTag方法。因?yàn)楹唵螛?biāo)簽沒有正文,所以這個(gè)方法返回SKIP_BODY。在遇到結(jié)束標(biāo)簽時(shí)調(diào)用doEndTag方法。如果要對(duì)頁面的其他部分進(jìn)行判斷,則doEndTag方法需要返回EVAL_PAGE,否則,它就返回SKIP_PAGE。

          在第一節(jié)討論的簡單標(biāo)簽

          <tt:simple />

          由下列標(biāo)簽handler實(shí)現(xiàn):

          public SimpleTag extends TagSupport {
          ??public int doStartTag() throws JspException {
          ????try { ??????pageContext.getOut().print("Hello.");
          ????} catch (Exception ex) {
          ??????throw new JspTagException("SimpleTag: " +
          ????????ex.getMessage()); ????}
          ????return SKIP_BODY; ??}
          ??public int doEndTag() {
          ????return EVAL_PAGE;
          ??}
          }

          body-content元素

          沒有正文的標(biāo)簽必須用body-content元素聲明它們的正文內(nèi)容是空的:

          <body-content>empty</body-content>

          posted on 2006-08-11 17:08 天外飛仙 閱讀(933) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 衢州市| 永泰县| 龙山县| 于田县| 长阳| 武夷山市| 和政县| 克什克腾旗| 呈贡县| 瑞安市| 汝南县| 卓资县| 宁乡县| 邢台市| 海门市| 东至县| 福建省| 淮阳县| 七台河市| 五大连池市| 岐山县| 自治县| 沧州市| 咸阳市| 宜宾县| 兖州市| 明溪县| 台南市| 大姚县| 乐安县| 鄂伦春自治旗| 永康市| 水城县| 通州市| 金阳县| 和硕县| 靖宇县| 辉县市| 会同县| 英吉沙县| 庐江县|