JSP自訂標籤基礎知識學習_JSP編程

來源:互聯網
上載者:User

在實際的開發中,如為了簡化JSP中出現大量的JSP指令碼,那麼我們需要使用標準標籤庫和EL運算式,但是和新標籤庫中提供的標籤是有限的,不可能完全滿足開發的需要。如:分頁。因此需要學習如何自訂自己的標籤庫。

如果要實現自訂標籤,那麼需要如下幾步:

編寫標籤處理類
需要繼承或者實現相關的類或者介面

編寫標籤描述檔案
該檔案是一個XML檔案,而且必須放在網站的WEB-INF目錄中

在JSP中引入標籤且使用
使用taglib指令引入標籤庫,隨後使用。

自定標籤的類體系

詳細瞭解下一下幾個類和介面:

---| JspTag介面

該介面是一個典型的標記介面。主要標記實現該介面的類可以處理標籤。Seralizable

----| Tag介面

該介面主要描述的是標籤處理類的共性,但是實現該介面的類不能處理標籤體,該介面中定義了標籤處理類和JSP頁面之間的通訊協定。而且提供生命週期方法如:在標籤開始和接結束的時候自動執行的方法。

------| TagSupport類

主要負責處理標籤的屬性。

-------| BodyTagSupport類

該類主要的是處理標籤的標籤體。

  體驗

1. 處理類

public class HelloHanler implements Tag {  private PageContext pageContext = null;  // 標籤結束的時候執行  public int doEndTag() throws JspException {    return 0;  }  // 標籤開始的時候執行  public int doStartTag() throws JspException {    // 給頁面輸出一個hello資訊    JspWriter out = pageContext.getOut();    // 輸出資訊    String info = "hello custom tag";    try {      out.write(info);    } catch (IOException e) {      e.printStackTrace();    }    return 0;  }  // 擷取其父標籤  public Tag getParent() {    return null;  }  // 釋放  public void release() {  }  // 設定jsp內容物件  public void setPageContext(PageContext pc) {    this.pageContext = pc;  }  // 設定父標籤  public void setParent(Tag t) {  }}

2. 描述檔案

<?xml version="1.0" encoding="UTF-8"?><taglib   xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  version="2.1"> <!-- 2. 編寫標籤庫描述檔案 -->  <tlib-version>1.0</tlib-version> <short-name>jnb</short-name>  <tag>   <name>hello</name>  <tag-class>cn.itcast.test.HelloHanler</tag-class>  <body-content>empty</body-content> </tag></taglib>  

3. 引入

<%@taglib uri="/WEB-INF/test.tld" prefix="jnb"%>   <br/><jnb:hello/>

JSP1.2進行自訂標籤開發

自訂一個現實日期的標籤。

1. 實現可以處理標籤屬性的標籤處理類

public class ShowDate extends TagSupport {  // 為了便於擷取屬性,那麼直接在處理類中定義和屬性同名的屬性變數即可且提供get和set方法  private String pattern;  public String getPattern() {    return pattern;  }  public void setPattern(String pattern) {    this.pattern = pattern;  }  // 標籤開始的時候自動執行  public int doStartTag() throws JspException {    // 建立日期對象    Date date = new Date();    // 建立格式化對象    SimpleDateFormat format = new SimpleDateFormat(getPattern());    // 格式化    String str = format.format(date);    // 擷取JSP內容物件    PageContext pageContext = this.pageContext;    // 擷取JSP的OUT輸出資料流    JspWriter out = pageContext.getOut();    // 輸出    try {      out.write(str);    } catch (IOException e) {      e.printStackTrace();    }    return super.doStartTag();  }}

2. 描述檔案

<taglib        標籤庫描述檔案的根項目  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"   version="2.1"> <!-- 2. 編寫標籤庫描述檔案 -->  <tlib-version>1.0</tlib-version>     指定標籤庫的版本(必須) <short-name>jnb</short-name>       指定標籤庫的簡稱(必須) <tag>                    指定一個標籤開始  <name>showdate</name>           標籤名  <tag-class>cn.itcast.custom.ShowDate</tag-class>   指定標籤處理類  <body-content>empty</body-content>   指定標籤體,JSP(有)empty(沒有)  <attribute>               描述屬性    <name>pattern</name>         屬性名稱    <required>true</required>     屬性的說明資訊    <rtexprvalue>true</rtexprvalue>   屬性值的說明資訊  </attribute> </tag></taglib> 

3.  引入和使用

<%@taglib uri="/WEB-INF/date.tld" prefix="date"%>   <date:showdate pattern="yyyy年MM月dd日 a E"/>

實現帶標籤體的自訂標籤

1. 標籤處理類

public class ShowDateByBody extends BodyTagSupport {  // 為了便於擷取屬性,那麼直接在處理類中定義和屬性同名的屬性變數即可且提供get和set方法  private String pattern;  public String getPattern() {    return pattern;  }  public void setPattern(String pattern) {    this.pattern = pattern;  }  // 標籤開始的時候自動執行  public int doStartTag() throws JspException {    // 建立日期對象    Date date = new Date();    // 建立格式化對象    SimpleDateFormat format = new SimpleDateFormat(getPattern());    // 格式化    String str = format.format(date);    // 擷取JSP內容物件    PageContext pageContext = this.pageContext;    // 擷取JSP的OUT輸出資料流    JspWriter out = pageContext.getOut();    // 擷取標籤提的內容    BodyContent body = this.getBodyContent();    String tag_body = body.getString();    str = "<font color='red'>"+tag_body+"</font>"+str;    // 輸出    try {      out.write(str);    } catch (IOException e) {      e.printStackTrace();    }    return super.doStartTag();  }}

2. 描述檔案

 <tag>   <name>showdate2</name>  <tag-class>cn.itcast.custom.ShowDateByBody</tag-class>  <body-content>JSP</body-content>  <attribute>    <name>pattern</name>    <required>true</required>    <rtexprvalue>true</rtexprvalue>  </attribute> </tag>

3. 引入和使用

<date:showdate2 pattern="yyyy-MM-dd">系統時間:</date:showdate2>

以上就是本文的全部內容,希望對大家的學習有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.