真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JSP中怎么自定義標(biāo)簽

JSP中怎么自定義標(biāo)簽,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為江津企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè),江津網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

(一) 沒(méi)有正文的JSP自定義標(biāo)簽實(shí)現(xiàn)

(1):定義JSP自定義標(biāo)簽處理類

import java.io.IOException;  import java.util.Date;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.jsp.JspException;  import javax.servlet.jsp.JspWriter;  import javax.servlet.jsp.tagext.Tag;  import javax.servlet.jsp.tagext.TagSupport;  //無(wú)正文標(biāo)簽類繼承的是TagSupport類 實(shí)現(xiàn)的接口是Tag。 如果有正文的標(biāo)簽類繼承的是BodyTagSupport類 實(shí)現(xiàn)的接口是BodyTag  public class DateTagNoBody extends TagSupport {   @Override   public int doStartTag() throws JspException {    HttpServletRequest request;    // 是TagSupport類中定義的一個(gè)屬性,它是javax.servlet.jsp.PageContext的對(duì)象    request = (HttpServletRequest) pageContext.getRequest();    java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat("yyyy-MM-dd");    String date = formater.format(new Date());    JspWriter out = pageContext.getOut();    try {     out.print(date);    } catch (IOException e) {     e.printStackTrace();    }    // doStartTag() 方法返回 SKIP_BODY 。當(dāng)然其原因是我們的簡(jiǎn)單日期標(biāo)記沒(méi)有正文。    return Tag.SKIP_BODY;   }  }

(2) 定義tld文件

     1.0    1.1        displayDate     cn.com.chenlly.tag.DateTagNoBody     empty              

(3) JSP頁(yè)面動(dòng)態(tài)引用

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/datetag.tld" prefix="c"%>                   

注意:動(dòng)態(tài)引用和靜態(tài)引用的區(qū)別。

為了進(jìn)行靜態(tài)引用,首先必須將下面的項(xiàng)加入到web.xml 文件中:

                    myTags       /WEB-INF/lib/DateTagLib.tld                     

然后,將JSP 聲明加入到所有需要使用自定義標(biāo)記庫(kù)的頁(yè)面中:

<%@ taglib uri="myTags" prefix="c" %>

指定的uri 屬性與在web.xml 文件中指定的taglib-uri 值相匹配。

在進(jìn)行標(biāo)記庫(kù)的靜態(tài)引用時(shí),JSP 聲明必須查詢 web.xml 文件以執(zhí)行庫(kù)查詢。這意味著如果移動(dòng)或者重命名了庫(kù),或者希望在 web.xml 文件中加入更多的庫(kù),就必須停止服務(wù)器、更新 web.xml 文件、然后重新啟動(dòng)服務(wù)器。動(dòng)態(tài)方法讓JSP頁(yè)直接指向 TLD 位置,因而是在解釋JSP頁(yè)面時(shí)進(jìn)行處理。

(二)  沒(méi)有正文的但帶有屬性的JSP自定義標(biāo)簽標(biāo)簽實(shí)現(xiàn)

(1):定義JSP自定義標(biāo)簽處理類

import java.io.IOException;  import java.util.Date;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.jsp.JspException;  import javax.servlet.jsp.JspWriter;  import javax.servlet.jsp.tagext.Tag;  import javax.servlet.jsp.tagext.TagSupport;  //無(wú)正文標(biāo)簽類繼承的是TagSupport類 實(shí)現(xiàn)的接口是Tag。 如果有正文的標(biāo)簽類繼承的是BodyTagSupport類 實(shí)現(xiàn)的接口是BodyTag  public class DateTagNoBody extends TagSupport {      private String pattern;   @Override   public int doStartTag() throws JspException {    HttpServletRequest request;    // 是TagSupport類中定義的一個(gè)屬性,它是javax.servlet.jsp.PageContext的對(duì)象    request = (HttpServletRequest) pageContext.getRequest();    java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(pattern);    String date = formater.format(new Date());    JspWriter out = pageContext.getOut();    try {     out.print(date);    } catch (IOException e) {     e.printStackTrace();    }    // doStartTag() 方法返回 SKIP_BODY 。當(dāng)然其原因是我們的簡(jiǎn)單日期標(biāo)記沒(méi)有正文。    return Tag.SKIP_BODY;   }      //必須實(shí)現(xiàn)setXX()方法   public void setPattern(String pattern){    this.pattern = pattern;   }  }

(2) 定義tld文件

       1.0     1.1          displayDate      cn.com.chenlly.tag.DateTagNoBody      empty                     pattern          String           false          false           

(3)JSP頁(yè)面動(dòng)態(tài)引用

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/datetag.tld" prefix="c"%>                   
        

(三) 有正文的且?guī)в袑傩缘腏SP自定義標(biāo)簽實(shí)現(xiàn)

(1):定義JSP自定義標(biāo)簽處理類

import java.io.IOException;  import java.util.Date;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.jsp.JspException;  import javax.servlet.jsp.JspWriter;  import javax.servlet.jsp.tagext.BodyContent;  import javax.servlet.jsp.tagext.BodyTagSupport;   public class BodyTag extends BodyTagSupport {      private int count;    private HttpServletRequest reqeust;    private JspWriter out;       public void init() {    reqeust = (HttpServletRequest) pageContext.getRequest();    out = pageContext.getOut();   }    @Override   public int doStartTag() throws JspException {    init();    return this.EVAL_BODY_INCLUDE;   }      //設(shè)置當(dāng)前標(biāo)簽體   @Override   public void setBodyContent(BodyContent bodyContent) {    this.bodyContent = bodyContent;    System.out.println("setBodyContent...");    }      //需要初始化bodyContent   @Override   public void doInitBody() throws JspException {    System.out.println("init.....");   }      @Override   public int doAfterBody() throws JspException {    if (count >= 1) {     try {      out.println(count);      out.println("
");     } catch (IOException e) {      e.printStackTrace();     }     count --;     return this.EVAL_BODY_AGAIN;    } else {     return this.SKIP_BODY;    }   }    @Override   public int doEndTag() throws JspException {    java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat(      "yyyy-MM-dd");    String date = formater.format(new Date());    try {     out.print(date);    } catch (IOException e) {     e.printStackTrace();    }    return this.EVAL_PAGE;   }    // 必須實(shí)現(xiàn)setXX()方法   public void setCount(int count) {    this.count = count;   }  }

(2) 定義tld文件

     1.0    1.1        iterator     cn.com.chenlly.tag.BodyTag     jsp                  count         int          false         false        

(3) jsp 頁(yè)面動(dòng)態(tài)引用

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/bodytag.tld" prefix="c"%>               HelloWorld!    <%      out.println("Bye Bye");      %>    

效果圖:

JSP中怎么自定義標(biāo)簽

執(zhí)行順序

doStartTag()->setBodyContent()->doInitBody()->doAfterTag()->doEndTag()

如果doStartTag()返回的是EVAL_BODY_INCLUDE執(zhí)行doAfterTag()方法,

如果它返回SKIP_BODY就執(zhí)行doEndTag()方法。

setBodyContent()方法用于設(shè)置標(biāo)簽體內(nèi)容,如果在計(jì)算BodyContent時(shí)需要進(jìn)行一些初始化工作,

則在doInitBody()方法中完成。標(biāo)簽體內(nèi)容執(zhí)行完后,會(huì)調(diào)用doAfterBody()方法

在doAfterTag()方法中返回EVAL_BODY_AGAIN來(lái)重復(fù)執(zhí)行doAfterTag()方法

返回SKIP_BODY值則執(zhí)行doEndTag()方法。

在doEndTag()方法中返回EVAL_PAGE值,則執(zhí)行此標(biāo)簽的后的其它代碼,

返回SKIP_PAGE則不執(zhí)行此頁(yè)面的其它代碼。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


本文標(biāo)題:JSP中怎么自定義標(biāo)簽
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/ggpsej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部