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

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

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

    posts - 27,  comments - 37,  trackbacks - 0
    如果在自訂標簽庫時,并不需要對標簽本體作處理,則您可以繼承TagSupport類別,TagSupport類別實作了TagIterationTag介面,IterationTag介面則是Tag介面的子介面,TagSupport類別替您預先實作了這兩個介面中的方法,在繼承TagSupport之后,您視需要來改寫當中的一些方法(這是 Default Adapter模式)。

    Tag介面中與標簽處相關的方法主要有:doStartTag()、doEndTag()。其中doStartTag()方法是遇到標簽開始時會呼叫的方法,其合法的回傳值是EVAL_BODY_INCLUDE與SKIP_BODY,前者表示將顯示標簽間的本體文字,后者表示不顯示標簽間的本體文字;doEndTag()方法是在遇到標簽結束時呼叫的方法,其合法的回傳值是EVAL_PAGE與SKIP_PAGE,傳回前者表示處理完標簽后繼承執行以下JSP網頁,傳回后者則表示不處理接下來的JSP網頁。

    IterationTag介面繼承Tag介面,在標簽處理上增加了doAfterBody(),這個方法是在顯示完標簽間文字本體之后呼叫的,其合法的回傳值有EVAL_BODY_AGAIN與SKIP_BODY,如果傳回前者,則會再顯示一次標簽間的文字本體,傳回后者則繼承執行標簽處理的下一步。

    TagSupport類別實作了Tag與IterationTag介面,其預設的回傳值是:doStartTag()回傳 SKIP_BODY、doAfterBodyTag()回傳SKIP_BODY、doEndTag()回傳EVAL_PAGE。所以在繼承 TagSupport之后,如果沒有改寫任何的方法,則在標簽處理上執行的順序是:

    doStartTag() -> 不顯示本體文字 -> doEndTag() -> 執行接下來的JSP網頁

    如果您改寫了doStartTag(),則您必須指定回傳值,如果指定了EVAL_BODY_INCLUDE,則預設會照以下的順序執行:

    doStartTag() -> 顯示本體文字 -> doAfterBodyTag()->doEndTag()->執行接下來的JSP網頁

    簡單的說,如果您繼承了TagSupport并改寫了其中的一些方法,則您必須指定方法合法的回傳值,如果不改寫,則會有其預設的回傳值,/以下作個流程整理:
    TagSupport流程

    如果您在處理標簽時,引用了一些資源,例如檔案I/O或是資料庫連結,則您可以改寫release()方法,這個方法會在doEndTag()之后執行,您可以在處理完標簽之后用它來釋放先前所使用到的資源。

    下面這個程式簡單的示范如何使用自訂標簽來對網頁內容作一些保護:
    • GuardTag.java
    package onlyfun.caterpillar; 

    import java.io.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;

    public class GuardTag extends TagSupport {
    public int doStartTag() throws JspException {
    String valid =
    pageContext.getRequest().getParameter("valid");

    // 如果flag設定為key,就顯示本體文字內容
    if(valid.equals("valid_user")) {
    return EVAL_BODY_INCLUDE;
    }

    return SKIP_BODY;
    }
    }

    同樣的,程式編譯完之后,放置在WEB-INF/classes/之下,然后編譯.tld檔案,如下:
    • guardtag.tld
    <?xml version="1.0" encoding="UTF-8" ?> 

    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    web-jsptaglibrary_2_0.xsd"
    version="2.0">

    <description>Tag Demo</description>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>TagDemo</short-name>
    <uri>/TagDemo</uri>

    <tag>
    <description>Cuard BodyText</description>
    <name>guard</name>
    <tag-class>onlyfun.caterpillar.GuardTag</tag-class>
    <body-content>JSP</body-content>
    </tag>

    </taglib>

    在<body-content>中設定的是JSP,這表示如果本體中包括JSP網頁的內容,將會被編譯執行,接下來您可以在web.xml中定義uri與.tld的名稱對應關系,方法與前一個主題相同,這邊就不重復說明了,然后撰寫一個測試的JSP網頁:
    • test.jsp
    <%@taglib prefix="caterpillar" 
    uri="http://caterpillar.onlyfun.net/"%>
    <html>
    <body>
    這個網頁包括受保護的內容OOOXXXX。。。。。。<p>
    <caterpillar:guard>
    ${ param.user }, 您好,幸運密碼是 oooxxx !
    </caterpillar:guard>
    </body>
    </html>

    為了要能看到幸運密碼,您必須在請求中包括guard參數,假設請求是:
    http://localhost:8080/myjsp/test.jsp?valid=valid_user&user=Justin

    這樣就可以看到幸運密碼了:
    <html>
    <body>
        這個網頁包括受包護的內容OOOXXXX。。。。。。<p>
       
            Justin, 您好,幸運密碼是: oooxxx !
       
    </body>
    </html>
     
    這是部份防護網頁內容的一個簡單例子,您還可以在doEndTag()中使用SKIP_PAGE來防護標簽以下的整個網頁,這使得您不用在JSP網頁中包括防護的判斷邏輯。


    原文見:http://www.chinascripts.com/docs/java/JSPServlet/JSPServlet/TagSupport.htm



     小時候家的對面有一座山,山的上面就是藍天,所以總是幻想著有一天站到山頂用手摸一下藍天……
    posted on 2007-11-07 20:51 丫丫 閱讀(1610) 評論(1)  編輯  收藏


    FeedBack:
    # re: JSP/Servlet: TagSupport 類別(轉)
    2009-11-13 14:50 | wangpy
    不錯,授教了  回復  更多評論
      

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


    網站導航:
     
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    常用鏈接

    留言簿(1)

    隨筆分類(25)

    隨筆檔案(27)

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青草久久精品亚洲综合专区| 亚洲另类精品xxxx人妖| 四虎精品免费永久免费视频| 国产男女性潮高清免费网站| 国产成人精品亚洲一区| 免费少妇a级毛片| www一区二区www免费| 中文亚洲AV片在线观看不卡 | 国产区图片区小说区亚洲区| 全部免费国产潢色一级| 日韩精品视频在线观看免费| 国产午夜亚洲精品午夜鲁丝片| 免费观看男人吊女人视频| 久久久亚洲欧洲日产国码是AV| 日本成年免费网站| 亚洲aⅴ无码专区在线观看| 免费大黄网站在线看| 国产免费AV片在线观看| 亚洲欧洲精品久久| 免费鲁丝片一级观看| 青青久久精品国产免费看| 亚洲国产精品久久久天堂| 50岁老女人的毛片免费观看| 亚洲激情视频图片| 亚洲免费无码在线| 麻豆精品成人免费国产片| 亚洲av专区无码观看精品天堂| 国产又大又黑又粗免费视频 | 一级特黄a大片免费| 日韩亚洲人成在线综合日本| 可以免费看的卡一卡二| 美女视频黄频a免费大全视频| 亚洲熟女少妇一区二区| 久久受www免费人成_看片中文| 国产精品亚洲一区二区三区久久| 国产亚洲A∨片在线观看| 久久WWW色情成人免费观看| 狠狠躁狠狠爱免费视频无码| 亚洲精品成人网站在线播放| 亚洲国产精品嫩草影院久久| 精品熟女少妇a∨免费久久|