標籤技術


 

自定義標籤:用於移除Jsp頁面中的java代碼。

完成自定義標籤的步驟:

JSP文件:

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@tagliburi="http://www.itcast.cn"prefix="itcast"%>

<!DOCTYPEHTMLPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

 <title>My JSP '1.jsp' starting page</title>

  </head>

  <body>

    您的IP是:<itcast:viewIP/>

  </body>

</html>

1、  編寫一個實現Tag接口的Java類,把頁面java代碼移到這個java類中(標籤處理器類)------一般實現TagSupport

publicclassViewIPTagextends TagSupport{

    @Override

    publicint doStartTag()throws JspException {

       HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();

       JspWriter out=this.pageContext.getOut();

      

       String ip=request.getRemoteAddr();

       try {

          out.print(ip);

       } catch (IOException e) {

          thrownew RuntimeException(e);

       }

       returnsuper.doStartTag();

    }  

}

2、  編寫標籤庫描述符(tld)文件,在tld文件中把標籤處理器描述成一個標籤

<?xmlversion="1.0"encoding="UTF-8"?>

<taglibxmlns="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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

    version="2.0">

    <description>A tag library exercising SimpleTag handlers.</description>

    <tlib-version>1.0</tlib-version>

   

    <short-name>itcast</short-name>

    <uri>http://www.itcast.cn</uri>

    <tag>

        <name>viewIP</name>

       <tag-class>cn.itcast.web.tag.ViewIPTag</tag-class>

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

    </tag>

</taglib>

Tag接口的執行流程:

1、  public void setPageContext(PageContext pc),JSP引擎實例化標籤處理器後,將調用setPageContext方法將JSP頁面的pageContext對象傳遞給標籤處理器,標籤處理器以後可以通過這個pagContext對象與JSP頁面進行通信

2、  public void setParent(Tag t),如果當前標籤沒有父標籤,則傳遞給setParent方法的參數值爲null

3、  public int doStartTag(),web容器執行到自定義標籤的開始標記時,就會調用標籤處理器的doStartTag方法

4、  public int doEndTag(),web容器執行完自定義標籤的標籤體後,就會接着去執行自定義標籤的結束標記,此時,web容器就會調用標籤處理器的doEndTag方法

5、  public void release(),通常web容器執行完自定義標籤後,標籤處理器會駐留在內存中,爲其他請求服務器,直至停止web應用時,web容器纔會調用release方法。

自定義標籤功能擴展:

1、  控制JSP頁面某一部分內容是否執行;à改變doStartTag( )的返回值(Tag.EVAL_BODY_INCLUDESKIP_BODY

2、  控制整個JSP頁面是否執行à改變doEndTag( )的返回值(Tag.SKIP_PAGETag.EVAL_PAGE

3、  控制JSP頁面重複執行[IterationTagàdoAfterBody( )à標籤體之後,結束標籤執行之前執行àEVAL_BODY_AGAINSKIP_BODY]--à繼承TagSupport,先覆蓋doStartTag( ),設置爲EVAL_BODY_INCLUDE,讓標籤體執行,然後doAfterBody();

4、  修改JSP頁面內容輸出[繼承BodyTagSupport]

1)、先覆蓋doStartTag(),返回BodyTag.EVAL_BODY_BUFFEREDà將標籤體內容作爲對象返回

2)、覆蓋doEndTag(),

    publicint doEndTag()throws JspException {

       BodyContent bc=this.getBodyContent();

       String content=bc.getString();

       content=content.toUpperCase();

       try {

          this.pageContext.getOut().write(content);

       } catch (IOException e) {

          thrownew RuntimeException(e);

       }

       return Tag.EVAL_PAGE;

    }  

}

 

SimpleTag(簡單標籤)

JspFragment jf=this.getJspBody( );

控制整個Jsp不執行:Throw new SkipPageException;

簡單標籤的執行流程:

1、  遇到簡單標籤;

2、  實例化標籤處理器類;

3、  調用setJspContext( ),把頁面pageContext傳遞給標籤處理器類;

4、  調用setParent把父標籤傳遞進去,如果沒有父親,傳null

5、  調用setJspBody(),把封裝了標籤體JspFragment傳遞給標籤處理器類;

6、  執行頁面中的自定義標籤,執行標籤實際上就是調用doTag()。

開發帶屬性的標籤:

1、  在標籤處理器中編寫每個屬性對應的setter方法

2、  在tld文件中描述標籤的屬性;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章