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( "
" );
}
}
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