jjsp自下定义标签.docx

上传人:b****6 文档编号:7415188 上传时间:2023-01-23 格式:DOCX 页数:17 大小:20.64KB
下载 相关 举报
jjsp自下定义标签.docx_第1页
第1页 / 共17页
jjsp自下定义标签.docx_第2页
第2页 / 共17页
jjsp自下定义标签.docx_第3页
第3页 / 共17页
jjsp自下定义标签.docx_第4页
第4页 / 共17页
jjsp自下定义标签.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

jjsp自下定义标签.docx

《jjsp自下定义标签.docx》由会员分享,可在线阅读,更多相关《jjsp自下定义标签.docx(17页珍藏版)》请在冰豆网上搜索。

jjsp自下定义标签.docx

jjsp自下定义标签

JSP:

自定义标签

一、一个简单的标签

EG1:

 一个简单的标签:

helloTag

  本实例将实现调用标签在JSP面中输出红色的字符:

“hello!

”。

  说明:

本章的所有实例均放于Web应用mytags中。

  

(1)第一步:

开发标签实现类。

  helloTag.java

  packagehello;

  importjavax.servlet.jsp.JspWriter;

  importjavax.servlet.jsp.tagext.TagSupport;

  publicclasshelloTagextendsTagSupport{

    //----标签开始时调用此方法-------

     publicintdoStartTag(){

       try{

           JspWriterout=pageContext.getOut();

           out.print("标签开始了。

hello!

");

         }catch(Exceptione){

            System.out.println(e);

        }

        returnEVAL_BODY_INCLUDE;

    }

    //----标签结束时调用此方法-------

    publicintdoEndTag(){

         try{

            JspWriterout=pageContext.getOut();

            out.print("标签结束了。

");

         }catch(Exceptione){

            System.out.println(e);

        }

        returnEVAL_PAGE;

    }  

  }

 

  代码中为正确输出",对此字符用\作了转义。

  

(2)第二步:

编写标签描述tld文件,并将tld文件放于当前应用的/WEB-INF目录下。

  myTag.tld

  

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

>

  

    xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

     xsi:

schemaLocation="  

    version="2.0">

     

--标签库版本-->

     1.0

     

--标签库名称-->

     myTagLib

     

--标签库URI-->

     /myTag

     

--标签库中的标签-->

     

--helloTag-->

     

      

--标签名称-->

      helloTag

       

--标签对应的处理类-->

       hello.helloTag

       

--标签体内容,没有标签体则设为empty-->

      empty

      

   

  (3)第三步:

在Web应用的web.xml文件中声明标签库引用。

本应用中在中增加的内容如下:

 

  /myTag

  /WEB-INF/myTag.tld

  

  对应tld文件中的指出tld文件的位置。

(4)第四步:

在JSP页面中声明并调用标签。

  useHelloTag.jsp

  <%@tagliburi="/myTag"prefix="myTag"%>

  <%@pagecontentType="text/html;charset=GB2312"%>

  

   

   一个简单的自定义标签

   

   

  下面是应用这个简单的自定义标签的结果:


  

helloTag/>

   

  

  

二、开发带属性的标签

  EG2 开发带属性的标签:

helloTagHaveProp

  本实例中开发的标签在实例EG1的helloTag标签上作出改进,开发目标是在helloTag标签上增加两个属性fontSize和fontColor,fontSize用于设置字体大小,fontColor用于设置文字的颜色。

  

(1)第一步:

开发标签实现类。

  helloTagHaveProp.java

  packagehello;

  importjavax.servlet.jsp.JspWriter;

  importjavax.servlet.jsp.tagext.TagSupport;

  publicclasshelloTagHavePropextendsTagSupport{

   privateStringfontSize="3";//字体大小,默认3号

   privateStringfontColor="#000000";//字体颜色,默认黑色

   //----标签开始时调用此方法-------

   publicintdoStartTag(){

       try{

           JspWriterout=pageContext.getOut();

           out.print("标签开始了。

               "\"size=\""+fontSize+"\">hello!

");

       }catch(Exceptione){

           System.out.println(e);

       }

       returnEVAL_BODY_INCLUDE;

   }

   //----标签结束时调用此方法-------

   publicintdoEndTag(){

       try{

           JspWriterout=pageContext.getOut();

           out.print("标签结束了。

");

       }catch(Exceptione){

           System.out.println(e);

       }

       returnEVAL_PAGE;

   }  

   publicStringgetFontColor(){

       returnfontColor;

   }

   publicvoidsetFontColor(StringfontColor){

       this.fontColor=fontColor;

   }

   publicStringgetFontSize(){

       returnfontSize;

   }

   publicvoidsetFontSize(StringfontSize){

       this.fontSize=fontSize;

    }

  }

  

(2)第二步:

编写标签描述tld文件。

这里在myTag.tld文件中增加内容,在之间增加的内容如下:

  

--helloTagHaveProp-->

  

    

--标签名称-->

    helloTagHaveProp

    

--标签对应的处理类-->

    hello.helloTagHaveProp

    

--标签体内容,没有标签体则设为empty-->

    empty

    

--标签的属性声明-->

    

     fontSize

     false

    

    

     fontColor

     false

    

  

  其中,name为属性的名称,required设置此属性是否必须设置,如果为true则在JSP页面中使用此标签时,必须给标签的这个属性赋值。

  (3)第三步:

在Web应用的web.xml文件中声明标签库引用。

本例与实例108使用同一个tld文件,故不必再修改。

  (4)第四步:

在JSP页面中声明并调用标签。

  useHelloTagHaveProp.jsp

  <%@tagliburi="/myTag"prefix="myTag"%>

  <%@pagecontentType="text/html;charset=GB2312"%>

  

   

   一个简单的自定义标签

   

   

  下面是应用这个简单的自定义标签的结果:


  

helloTagHavePropfontSize="5"/>

  

helloTagHavePropfontSize="4"fontColor="red"/>

   

  

三、开发带标签体的标签

要开发带标签体的标签,可实现BodyTag接口,也可从BodyTag接口的实现类BodyTagSupport继承,为简化开发,推荐从BodyTagSupport类继承开发。

  编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:

doStartTag(),setBodyContent(),doInitBody(),doAfterBody(),doEndTag(),他们执行顺序如下:

doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,如果返回EVAL_BODY_INCLUDE则继续执行;如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(),doAfterBody()三个方法不会被执行,而直接执行doEndTag()方法。

  setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。

标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG,SKIP_BODY,

  EVAL_PAGE或SKIP_PAGE。

如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。

  EG3:

 开发带标签体的标签:

bodyTag1

  本实例将要开发一个带标签体的标签bodyTag1,这个标签有一个属性countNum,用于设置输出标签体内容的次数,输出内容为当前的系统时间。

  

(1)第一步:

开发标签实现类。

  BodyTag1.java

  packagebody;

  importjavax.servlet.jsp.JspWriter;

  importjavax.servlet.jsp.tagext.BodyTagSupport;

  publicclassbodyTag1extendsBodyTagSupport{

   privateintcountNum=0;//循环显示时间的次数

   privateintcurrentNum=1;//当前执行次数

   //----标签开始时调用此方法-------

   publicintdoStartTag(){

       try{

           JspWriterout=pageContext.getOut();

           out.print("标签开始了:


");

           if(countNum>0)

               returnEVAL_BODY_TAG;

           else

               returnSKIP_BODY;

           

       }catch(Exceptione){

           System.out.println(e);

           returnSKIP_BODY;

       }

   }

   //----标签体执行完后调用此方法----

   publicintdoAfterBody(){

       try{

        JspWriterout=pageContext.getOut();

        out.print("第"+currentNum+"次执行标签体。

标签体执行完毕。


");

        if(countNum>1){//如果还需要执行标签体

           countNum--;

           currentNum++;

           returnEVAL_BODY_TAG;

        }elsereturnSKIP_BODY;

       }catch(Exceptione){

           System.out.println(e);

           returnSKIP_BODY;

       }

   }

   //----标签结束时调用此方法-------

   publicintdoEndTag(){

       try{

           JspWriterout=pageContext.getOut();

           //----输出标签体的内容----

           bodyContent.writeOut(bodyContent.getEnclosingWriter());

           out.print("标签结束了。

");

       }catch(Exceptione){

           System.out.println(e);

       }

       returnEVAL_PAGE;

   }  

   publicintgetCountNum(){

       returncountNum;

   }

   publicvoidsetCountNum(intcountNum){

       this.countNum=countNum;

       this.currentNum=1;

    }

  }

  执行标签体并不会直接输出标签体中的内容,因此本实例在doEndTag()方法中一次性把执行的结果输出。

  

(2)第二步:

编写标签描述tld文件。

  因为本章所有实例共用一个Web应用,故本例在myTag.tld文件中增加内容。

之间增加的内容如下:

  

--bodyTag1-->

  

  

--标签名称-->

  bodyTag1

  

--标签对应的处理类-->

  body.bodyTag1

  

--标签体内容,有标签体则设为jsp-->

  jsp

  

--标签的属性声明-->

  

   countNum

   true

   true

  

  

  对于属性countNum的声明中,设置为true,表示此属性为必输项;设置为true,表示标签体支持运行时的表达式取值,如果为false则表示标签体为一个静态文本,默认情况下设置为true。

  (3)第三步:

在Web应用的web.xml文件中声明标签库引用。

  同样,本例与实例108使用同一个tld文件,不必再修改。

  (4)第四步:

在JSP页面中声明并调用标签。

  UseBodyTag1.jsp

  <%@tagliburi="/myTag"prefix="myTag"%>

  <%@pagecontentType="text/html;charset=GB2312"%>

  <%@pageimport="java.util.Date"%>

  

   

   开发带有标签体的标签

   

   

  下面是应用这个带有属性的自定义标签的结果:


  

bodyTag1countNum="6">

   现在的时间是:

<%=newDate()%>

  

bodyTag1>

   

  

四、开发嵌套的标签

EG4:

 开发嵌套的标签:

haveChildTag

  实际工程中往往需要多个标签来配合完成一定的功能,嵌套的标签存在父子关系,其中,父为外层标签,子为内层标签。

本实例将用两个简单的标签来演示,父标签则作出逻辑判断,如果isOutput属性为true,则输出实例108中的标签helloTag;如果为false,则不输出。

  

(1)第一步:

开发标签实现类。

  内层的标签helloTag在实例108中已有,此处不再列出。

  haveChildTag.java

  packagehello;

  importjavax.servlet.jsp.tagext.BodyTagSupport;

    publicclasshaveChildTagextendsBodyTagSupport{

    privatebooleanisOutput;//是否输出子标签内容

     //----标签开始时调用此方法-------

     publicintdoStartTag(){

         if(isOutput)

             returnEVAL_BODY_INCLUDE;

         elsereturnSKIP_BODY;

    }

     //----标签结束时调用此方法-------

     publicintdoEndTag(){

        try{

            if(bodyContent!

=null)

               bodyContent.writeOut(bodyContent.getEnclosingWriter());

         }catch(Exceptione){

             System.out.println(e);

         }

         returnEVAL_PAGE;

     }  

     publicbooleangetIsOutput(){

         returnisOutput;

    }

     publicvoidsetIsOutput(booleanisOutput){

        this.isOutput=isOutput;

     }

  }

  

(2)第二步:

编写标签描述tld文件。

  本例在myTag.tld文件中增加内容。

之间增加的如下内容:

  

--haveChildTag-->

  

  

--标签名称-->

  haveChildTag

  

--标签对应的处理类-->

  hello.haveChildTag

  

--标签体内容,有标签体则设为jsp-->

  jsp

  

--标签的属性声明-->

  

   isOutput

   true

   true

  

  

  (3)第三步:

在Web应用的web.xml文件中声明标签库引用。

  同样,本例与本章前面的实例使用同一个tld文件,此处不必再修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1