<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    limq

    rainman
    隨筆 - 19, 文章 - 2, 評論 - 115, 引用 - 1
    數據加載中……

    自定義標簽

    轉貼一篇文章,義務作一下普及工作吧.

    1.  什么是自定義標簽
    答:1) 用戶自定義的Java語言元素, 實質是運行一個或者兩個接口的JavaBean;
       2) 可以非常機密地和JSP的表示邏輯聯系在一起,又具有和普通JavaBean相同的業務邏輯處理能力;
       2) 當一個JSP頁面轉變為servlet時,其間的用戶自定義標簽轉化為操作一個稱為標簽hander的對象;
       3) 可操作默認對象,處理表單數據,訪問數據庫以及其它企業服務;                

    2.  自定義標簽庫的特點
    答:1) 通過調用頁面傳遞參數實現定制;
       2) 訪問所有對JSP頁面可能的對象;
       3) 修改調用頁面生成的響應;
       4) 自定義標簽間可相互通信;
       5) 在同一個JSP頁面中通過標簽嵌套,可實現復雜交互。

    3.  如何使用自定義標簽庫
    答:1) 聲明標簽庫
       2) 使標簽庫執行對Web應用程序可用

    4.  聲明標簽庫
    答:1) 使用taglib指令聲明標簽庫
       2) 語法:<%@taglib uri="URI" prefix="pre" %>
          注意:a. uri屬性可以是絕對的,也可以是相對URL,該URL指向標記庫描述符(TLD)文件;
                b. uri屬性也可以是一個并不存在的URL,該URL為web.xml文件中將標記庫描述符(TLD)文件的絕對URL到本地系統的一個映射;
       3) 范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %>
                <%@taglib uri="http://java.sun.com/jstl/core" prefix="core" %>      

    5.  使標簽庫執行可用
    答:方式一:在WEB-INF/classes目錄下部署標記處理程序類;
       方式二:將標記處理程序類打包成jar文件并置于WEB-INF/lib目錄。

    6.  幾種典型的標簽(疑問:可以有帶主體而沒有屬性的標簽么?)
    答:1) 不帶屬性和主體的簡單標簽:<mytaglibs:SomeTag/>;
       2) 不帶主體但有屬性的標簽:<mytaglibs:SomeTag user="TonyDeng"/>;
       3) 帶有主體和屬性的標簽:<mytaglibs:SomeTag user="TonyDeng">
                                ...// 標簽體
                                </mytaglibs:SomeTag>;
       注意:a. 屬性列于start tag中,它是在標記庫描述符(TLD)文件中指定,服務于標記庫的自定義行為;
             b. 標簽體位于start tag和end tag間,可以是任何合法的JSP內容或者標簽;

    7.  定義標簽
    答:1) 開發實現tag的類(tag handler);
       2) 編輯標記庫描述符(TLD)文件;
       3) 在web.xml中為標記庫描述符(TLD)文件的絕對URL建立一個映射(該步驟可選);

    8.  標記庫描述符(TLD)文件
    答:1) 一個描述標記庫的XML文件;
       2) 內容開始是整個庫的描述,然后是tag的描述;
       3) 標記庫描述符(TLD)文件用于Web Container確認tag以及JSP頁面發展工具;

    9.  實現tag的類(tag handler)
    答:1) 是一些在引用了標簽的JSP頁面執行期間被Web Container調用以求自定義標簽值的對象;
       2) 必須實現Tag, SimpleTag和BodyTag之一;
       3) 可以繼承TagSupport和BodyTagSupport之一。

    10. 標簽庫的接口和類的繼承關系
    答:表現形式一:
       a. 接口的繼承關系:
          ☉ interface javax.servlet.jsp.tagext.JspTag
             ☉ interface javax.servlet.jsp.tagext.SimpleTag
             ☉ interface javax.servlet.jsp.tagext.Tag
                ☉ interface javax.servlet.jsp.tagext.IterationTag
                ☉ interface javax.servlet.jsp.tagext.BodyTag
       b. 類的繼承關系:
          ☉ class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
             ☉ class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
          ☉ class javax.servlet.jsp.tagext.SimpleTagSupport (implements javax.servlet.jsp.tagext.SimpleTag)
       表現形式二:
                     (Interface)
                       JspTag
                         ↑
                 |ˉˉˉˉˉˉˉˉ|    
            (Interface)      (Interface)
                Tag           SimpleTag ←--SimpleTagSupport
                 ↑                          
                 |                            
            (Interface)  
            IterationTag←--TagSupport
                 ↑                ↑
                 |                 |
            (Interface)            |
              BodyTag   ←--BodyTagSupport

    2004-10-9      星期四      晴                                              



    11. 一個Tag處理程序類必須實現的方法
    答:標簽處理程序類型            方法
       Simple                      doStartTag, doEndTag, release
       Attributes                  doStartTag, doEndTag, set/getAttribute...release
       Body,No Itrative and        doStartTag, doEndTag, release
       Evaluation  
       Body, Itrative Evaluation   doStartTag, doAterTag, doEndTag, release
       Body, Interaction           doStartTag, doEndTag, release, doInitbody, doAfterBody

    12. 簡單的標簽處理程序類
    答:1) 必須實現Tag接口的doStartTag()和doEndTag()方法;
       2) 因為不存在Body,doStartTag()方法必須返回SKIP_BODY;
       3) 如其余頁面要執行,doEndTag()方法返回EVAL_PAGE, 否則返回SKIP_PAGE;
       4) 對于每一個標簽屬性,你必須在標簽處理程序類里定義一個特性以及get和set方法以一致于JavaBeans體系慣例

    13. 帶Body的自定義標簽
    答:1) 必須實現Tag接口的doStartTag()和doEndTag()方法;
       2) 可以實現IterationTag接口的doAfterBody()方法;
       3) 可以實現BodyTag接口的doInitBody和setBodyContent方法;
       4) doStartTag方法可以返回SKIP_BODY、EVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(當你想使用BodyContent);
       5) doEndTag方法可以返回SKIP_PAGE或EVAL_PAGE;
       6) doAfterBody方法可以返回EVAL_BODY_AGAIN, SKIP_BODY;

    14. 定義腳本變量的標簽(迭代的標簽庫)
    答:1) 定義腳本標簽的二個步驟:
          a. 在標記庫描述符(TLD)文件中列明腳本變量;
          b. 定義標簽擴展信息類(TEI)并且在TLD文件中包括這個類元素(tei-class);
       2) 變量必須在標簽處理程序類中使用pageContext.setAttribute()方法設置;
       3) 標簽擴展信息類(TEI)必須繼承TagExtraInfo以及覆蓋getVariableInfo()方法;
       4) 變量的范圍可以是AT_BEGIN, NESTED, AT_END(標簽擴展信息類(TEI)的VariableInfo中定義)之一;

    15. 腳本變量的有效性
    答:變量     |   有效性                    
       ---------------------------------------
       NESTED   | 標簽中的參數在starttag到endtag之間是有效的
       AT_BEGIN | 標簽中的參數在標簽的開始到JSP頁面結束是有效的
       AT_END   | 標簽中的參數在標簽的結束到JSP頁面結束是有效的

    2004-10-10     星期四      晴

    16.  Tag接口的方法
    答:interface javax.servlet.jsp.tagext.Tag
       ------------------------------------------------------
       +EVAL_BODY_INCLUDE:int
       +EVAL_PAGE:int
       +SKIP_BODY:int
       +SKIP_PAGE:int
       ------------------------------------------------------
       +release():void
       +getParent():javax.servlet.jsp.tagext.Tag
       +setParent(javax.servlet.jsp.tagext.Tag):void
       +doEndTag():int
       +doStartTag():int
       +setPageContext(javax.servlet.jsp.PageContext):void

    17.  Tag的生命周期
    答:1) setPageContext(javax.servlet.jsp.PageContext):void
       2) setParent(javax.servlet.jsp.tagext.Tag):void
       3) //setAttribute:void
       4) doStartTag():int
       5) doEndTag():int
       6) release():void

    18.  BodyTag和Tag接口的關系
    答:interface javax.servlet.jsp.tagext.BodyTag      -->     interface javax.servlet.jsp.tagext.Tag
       ------------------------------------------
       +EVAL_BODY_AGAIN:int
       ------------------------------------------
       +doInitBody():void
       +setBodyContent(javax.servlet.jsp.tagext.BodyContext):void
       +doAfterBody():int

    19.  BodyTag的處理過程
    答:1) setPageContext(javax.servlet.jsp.PageContext):void
       2) setParent(javax.servlet.jsp.tagext.Tag):void
       3) //setParent()
       4) doStartTag():int
       5) setBodyContent(javax.servlet.jsp.tagext.BodyContent):void
       6) doInitBody():void
       7) doAfterBody():int
       doEndTag():int
       9) release():void

    20.  SimpleTag接口的方法
    答:javax.servlet.jsp.tagext.SimpleTag
       ------------------------------------------
       +doTag():void
       +getParent():JspTag
       +setJspBody(JspFragment jspBody):void
       +setJspContext(JspContext pc):void
       +setParent(JspTag parent):void

    21.  SimpleTage接口的生命周期
    答:1) new:
          每次遇到標簽,容器構造一個SimpleTag的實例,這個構造方法沒有參數。和紅典的標簽一樣,SimpleTag不能緩沖,故不能重用,每次都需要構造新的實例。
       2) setJspContext()、setParent(): 只有這個標簽在另一個標簽之內時,才調用setParent()方法;
       3) 設置屬性:調用每個屬性的setter方法;
       4) setJspBody();
       5) doTag(): 所有標簽的邏輯、迭代和Body計算,都在這個方法中;
       6) return

    posted on 2005-03-03 23:55 limq 閱讀(7953) 評論(3)  編輯  收藏

    評論

    # re: 自定義標簽   回復  更多評論   

    如何開發帶body的SimpleTag呢?
    2006-04-27 14:08 | vane

    # re: 自定義標簽   回復  更多評論   

    很好
    2007-10-16 10:33 | pic

    # re: 自定義標簽   回復  更多評論   

    溫習一下 不錯 帶body的SimpleTag目前我沒有用到過
    2008-08-22 11:50 | oasis

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成人超污免费网站在线看| 国产亚洲大尺度无码无码专线 | 久久久高清免费视频| 亚洲免费视频播放| 国产一级理论免费版| 国产成人无码区免费网站| 亚洲影视一区二区| 日韩亚洲精品福利| 精品国产sm捆绑最大网免费站 | 成人免费777777被爆出| 亚洲综合国产精品| 国产男女猛烈无遮挡免费视频| 日韩精品无码免费专区午夜| 亚洲国产夜色在线观看| 亚洲性在线看高清h片| 91免费国产在线观看| www免费黄色网| 亚洲伊人久久大香线蕉AV| 久久久久亚洲AV成人无码| 蜜臀91精品国产免费观看| 国产一区二区免费视频| 亚洲第一成年网站视频| 亚洲黄色片免费看| 久久国产亚洲精品麻豆| 亚洲男女内射在线播放| 免费爱爱的视频太爽了| 国产黄色免费网站| 久久成人免费播放网站| 国产免费伦精品一区二区三区| 亚洲va久久久久| 亚洲福利视频网站| 亚洲精品视频在线观看免费| 亚洲色欲一区二区三区在线观看| 亚洲AV蜜桃永久无码精品| 在线看片无码永久免费aⅴ| 免费黄色网址入口| 免费无遮挡无码视频网站| 免费观看的a级毛片的网站| 成年人视频在线观看免费| 夫妻免费无码V看片| 永久免费bbbbbb视频|