資格認證:JSP自定義標簽開發(fā)流程

字號:

jsp(SUN企業(yè)級應(yīng)用的首選)中有一塊重要的技術(shù):自定義標簽(Custom Tag),最近這幾天在學習Struts的時候發(fā)現(xiàn)Struts中使用了很多自定義標簽,如html、bean等。所以我就做了個簡單的試驗,學習一下這種技術(shù)。
    首先介紹一下這種技術(shù)吧!
    1.優(yōu)點:
    取代了jsp(SUN企業(yè)級應(yīng)用的首選)中的Java程序,并且可以重復(fù)使用,方便不熟悉Java編程的網(wǎng)頁設(shè)計人員。
    2.開發(fā)流程:
    (1)編寫jsp(SUN企業(yè)級應(yīng)用的首選),在jsp(SUN企業(yè)級應(yīng)用的首選)中使用自定義標簽。
    (2)在web.xml(標準化越來越近了)中指定jsp(SUN企業(yè)級應(yīng)用的首選)中使用的標簽的.tld(標簽庫描述文件)文件的位置。
    (3).tld文件中指定標簽使用的類。
    3. 自定義標簽的分類:
    (1)簡單標簽:如< mytag:helloworld/>
    (2)帶屬性標簽:如”/>
    (3)帶標簽體的標簽:在自定義標簽的起始和結(jié)束標簽之間的部分為標簽體(Body)。Body的內(nèi)容可以是jsp(SUN企業(yè)級應(yīng)用的首選)中的標準標簽,也可以是HTML、腳本語言或其他的自定義標簽。
    ”>
    
    
    (4)可以被Script使用的標簽:定義了id和type屬性的標簽可以被標簽后面的Scriptlet使用。
    
    <%oraDB.getConnection(); %>
    4.接口及其他
    實際上,自定義標簽的處理類實現(xiàn)了Tag Handler對象。jsp(SUN企業(yè)級應(yīng)用的首選)技術(shù)在javax.servlet.jsp(SUN企業(yè)級應(yīng)用的首選)。tagext中提供了多個Tag Handler接口,jsp(SUN企業(yè)級應(yīng)用的首選)1.2中定義了Tag、BodyTag、IterationTag接口,在jsp(SUN企業(yè)級應(yīng)用的首選)2.0中新增了SimpleTag接口。jsp(SUN企業(yè)級應(yīng)用的首選)還提供了上述接口的實現(xiàn)類TagSupport、BodyTagSupport和SimpleTagSupport(SimpleTagSupport只在jsp(SUN企業(yè)級應(yīng)用的首選)2.0中才有)。BodyTagSupport實現(xiàn)了BodyTag、Tag和IterationTag接口。
    接口及其方法
    Tag接口
    方法
    SimpleTag
    dotage
    Tag
    doStartTag,doEndTag,release
    IterationTag
    doStartTag,doAfterTag,release
    BodyTag
    doStartTag,doEndTag,release,doInitBody,doAfterBody
    下表引自Sun的jsp(SUN企業(yè)級應(yīng)用的首選)在線教程。
    Tag Handler Methods
    Tag Handler Type
    Methods
    Simple
    doStartTag, doEndTag, release
    Attributes
    doStartTag, doEndTag, set/getAttribute1...N, release
    Body, Evaluation and No Interaction
    doStartTag, doEndTag, release
    Body, Iterative Evaluation
    doStartTag, doAfterBody, doEndTag, release
    Body, Interaction
    doStartTag, doEndTag, release, doInitBody, doAfterBody, release
    下表中的EVAL是evaluate的縮寫,意思是:評價, 估計, 求……的值,在下列的返回值中的意思是執(zhí)行。
    返回值意義
    SKIP_BODY表示不用處理標簽體,直接調(diào)用doEndTag()方法。
    SKIP_PAGE忽略標簽后面的jsp(SUN企業(yè)級應(yīng)用的首選)內(nèi)容。
    EVAL_PAGE處理標簽后,繼續(xù)處理jsp(SUN企業(yè)級應(yīng)用的首選)后面的內(nèi)容。
    EVAL_BODY_BUFFERED表示需要處理標簽體。
    EVAL_BODY_INCLUDE表示需要處理標簽體,但繞過setBodyContent()和doInitBody()方法
    EVAL_BODY_AGAIN對標簽體循環(huán)處理