JAVA自訂標籤教程及執行個體代碼

來源:互聯網
上載者:User

Test.jsp

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'Test.jsp' starting page</title>  </head>   <body>    This is my JSP page. <br>    Date : <%= new java.util.Date().toString() %> <br>    File : <input value="<%= request.getServletPath() %>" />   </body></html>

為了將這個這個Test.jsp改成自訂標籤方法,我們分別使用簡單標籤和內容標籤兩種不同的方式實現。

1. 簡單標籤

由於我們需要輸出兩個內容(日期和檔案名稱),因此我們為標籤建立一個參數。具體代碼:

DemoTag.java package com.mycompany;import java.util.Date;import javax.servlet.http.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;public class DemoTag extends TagSupport {    public int doStartTag() throws JspException {        try {      HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();      JspWriter out = pageContext.getOut();                  if (parameter.compareToIgnoreCase("filename") == 0)        out.print(request.getServletPath());      else         out.print(new Date());          } catch (java.io.IOException e) {      throw new JspTagException(e.getMessage());    }        return SKIP_BODY;  }    private String parameter = "date";    public void setParameter(String parameter) {    this.parameter = parameter;  }     public String getParameter() {    return parameter;  }}

接下來,我們建立標籤檔案 MyTagLib.tld。標籤檔案其實只是一個XML格式的說明檔案,內容也很簡單。

MyTagLib.tld

 

<?xml version="1.0" encoding="ISO-8859-1"?><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><tag>  <name>demo</name>  <tag-class>com.mycompany.DemoTag</tag-class>  <body-content>empty</body-content>  <attribute>    <name>parameter</name>    <required>false</required>    <rtexprvalue>true</rtexprvalue>  </attribute></tag></taglib>

在這個標籤檔案中,我們將我們建立的標籤取名 demo,並聲明了類型和參數(parameter)。將該檔案儲存在 /WEB-INF 下面。
當然,我們還需要將我們自訂的標籤添加到 web.xml 中,否則還是無法使用。

web.xml 裡面增加:

  <jsp-config>    <taglib>      <taglib-uri>/WEB-INF/MyTagLib</taglib-uri>      <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>    </taglib>  </jsp-config>

你可能在別處看到過類似的聲明,只是沒有外面的 jsp-config,但是我們使用的是DTD 2.4,如果不加,Eclipse 會提示出錯。

到此為止,我們的自訂標籤算是建立完畢。接下來,我們可以開始改寫那個JSP檔案來分離代碼了。

Test.jsp

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%><html>  <head>    <title>My JSP 'Test.jsp' starting page</title>  </head>   <body>    This is my JSP page. <br>    Date : <mytag:demo parameter="date" /><br>    File : <mytag:demo parameter="filename" />  </body></html>

上面這些想必你已經很熟悉,我就不做多說了。

2. 內容標籤

建立過程和上面大抵相同,只是程式檔案和配置內容有些差異。

DemoTag2.java package com.mycompany;

import java.io.IOException;import java.util.Date;import javax.servlet.http.*;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;public class DemoTag2 extends BodyTagSupport {    public int doStartTag() throws JspTagException {        return EVAL_BODY_BUFFERED;  }    public int doEndTag() throws JspTagException {    String body = this.getBodyContent().getString();    HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();        body = body.replace("$date", new Date().toString());    body = body.replace("$filename", request.getServletPath());        try {      pageContext.getOut().print(body);    }    catch (IOException e) {      throw new JspTagException(e.getMessage());    }        return SKIP_BODY;  }}

我們將新的標籤 DemoTag2 加入到上面的標籤檔案中。

MyTagLib.tld

 

<?xml version="1.0" encoding="ISO-8859-1"?><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><tag>  <name>demo</name>  <tag-class>com.mycompany.DemoTag</tag-class>  <body-content>empty</body-content>  <attribute>    <name>parameter</name>    <required>false</required>    <rtexprvalue>true</rtexprvalue>  </attribute></tag><tag>  <name>demo2</name>  <tag-class>com.mycompany.DemoTag2</tag-class>  <body-content>jsp</body-content></tag></taglib>

web.xml 檔案無需修改。

看看同時使用兩種標籤的Test.jsp效果。

Test.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%><html>  <head>    <title>My JSP 'Test.jsp' starting page</title>  </head>   <body>    This is my JSP page. <br>    Date : <mytag:demo parameter="date" /><br>    File : <mytag:demo parameter="filename" />    <hr>    <mytag:demo2>    Date: $date<br>    File: $filename    </mytag:demo2>  </body></html>

至此,兩種標籤方式都完成。
本文並沒有就相關技術細節做出說明,建議您看看Sun有關JSP自訂標籤的官方文檔。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.