java自定义 注解 annotation、标签库tag、监听listener、junit简单测试代码(四)

2014-11-24 02:08:42 · 作者: · 浏览: 2
new Date()); } catch (IOException e) { e.printStackTrace(); } return eva l_PAGE; } }
package org.rui.tag;
import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

import java.io.IOException;

 

public class HelloWorldSimpleTag extends SimpleTagSupport {

   

    public void doTag() throws JspException, IOException {

       getJspContext().getOut().write( "
  
simpeltag测试
helloWorld!
" ); } }

package org.rui.tag;
import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.util.Hashtable;

import java.io.Writer;

import java.io.IOException;

import java.util.Date;      

 

/**

 *演示怎么实现Tag接口的方式来开发标签程序

 */

public class HelloTag_Interface implements javax.servlet.jsp.tagext.Tag

{
     private PageContext pageContext;
     private Tag parent;
     public HelloTag_Interface()
     { 
       super();
     }

    /**
      *设置标签的页面的上下文
      */

     public void setPageContext(final javax.servlet.jsp.PageContext pageContext)

     {this.pageContext=pageContext; 
     }

    /**
      *设置上一级标签
      */

     public void setParent(final javax.servlet.jsp.tagext.Tag parent)

     {  
          this.parent=parent; 
     }

    

     /**
      *开始标签时的操作
      */

     public int doStartTag() throws javax.servlet.jsp.JspTagException 

     {  
          return SKIP_BODY;  //返回SKIP_BODY,表示不计算标签体
     }

    

     /**
      *结束标签时的操作
      */
     public int doEndTag() throws javax.servlet.jsp.JspTagException 

     {
           try
           {  
                pageContext.getOut().write("Hello World!你好,世界!");

           }                 

          catch(java.io.IOException e)
          {
               throw new JspTagException("IO Error: " + e.getMessage());

          } 

          return eva l_PAGE;

      }
     /**
      *release用于释放标签程序占用的资源,比如使用了数据库,那么应该关闭这个连接。
      */

     public void release() {}   
     public javax.servlet.jsp.tagext.Tag getParent()  

     {   
        return parent;
     }

}

package org.rui.tag;
import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.util.Hashtable;

import java.io.Writer;

import java.io.IOException;

 

public class BodyTagExample extends BodyTagSupport{
       int counts;//counts为迭代的次数。
       public BodyTagExample()
       { super(); }


       /**
        *设置counts属性。这个方法由容器自动调用。
        */

       public void setCounts(int c)
       { this.counts=c;  }

      

       /**

        *覆盖doStartTag方法
        *当返回eva l_BODY_INCLUDE时,就计算标签的Body,
        *如果返回SKIP_BODY,就不计算标签的Body。 
        */

        public int doStartTag() throws JspTagException   {  
            System.out.println("doStartTag==========");
            if(counts>0){//表示继续计算一次BodyTag
            	
                return eva l_BODY_TAG; 
                
            }else
            {//不计算标签的Body
            	
                return SKIP_BODY;
                           }

    }

   

    /**
     *覆盖doAfterBody方法
     *如果返回eva l_BODY_TAG,表示继续计算一次BodyTag,
     *直接返回SKIP_BODY才继续执行doEndTag方法。
     */

    public int doAfterBody() throws JspTagException{
        System.out.println("doAfterBody"+counts);
        if(counts>1){
        	counts--;
        	//System.out.println("eva l_BODY_TAG:"+eva l_BODY_TAG);
            return eva l_BODY_TAG;
         } else {
        	 //System.out.println("SKIP_BODY:"+SKIP_BODY);
            return SKIP_BODY;
         }

    }

   

   /**

     *覆盖doEndTag方法

     */

    public int doEndTag() throws JspTagException{
         System.out.println("doEndTag");
         
			try {
				if(bodyContent != null){
				bodyContent.writeOut(bodyContent.getEnclosingWriter());
				}
				} catch (IOException e) {
				e.printStackTrace();
			}

        return eva l_PAGE; 

    }

   

     public void doInitBody() throws JspTagException{

      System.out.println("doInitBody");

     }

     public void setBodyContent(BodyContent bodyContent)

     {  

          System.out.println("setBodyContent");

          this.bodyCont