一、继承自SimpleTag接口的自定义标签实现类称为简单标签,接口中5个方法
1、setJspContext方法
用于把JSP页面的PageContext对象传递给标签处理器对象
2、setParent方法
把父标签处理器对象传递给当前处理器对象
3、getParent方法
用于获取当前标签的父标签处理器对象
4、setJspBody方法
用于把代表标签体的JspFragment对象传递给标签处理器对象
5、doTag方法
用于完成所有标签逻辑,如输出、迭代、修改标签内容等。在方法中可以通过抛出javax.servlet.jsp.SkipPageException异常,通知WEB容器不再执行当前标签结束标记后面代码,等效于doTagEnd方法的返回值常量Tag.SKIP__PAGE
二、SimpleTag接口方法在WEB容器中执行顺序
1、调用setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象
2、如果当前标签有父级标签,调用setParent方法将父标签处理器对象传递给当前标签处理器对象
3、如果当前标签有属性,则调用每个属性的setter方法,将属性值传递给标签处理器对象;如果属性是EL表达式或脚本表达式,则WEB容器优先计算表达式,然后把值传递给标签处理器对象
4、简单标签有标签体,则调用setJspBody方法,把代表标签体的JspFragment对象传递给标签处理器
5、WEB容器执行doTag方法,通过操作JspFragment对象,实现标签体是否执行、迭代、修改标签体内容等操作
三、例子,开发中经常继承自SimpleTagSupport类
1、控制标签体是否执行,不调用invoke方法则不执行标签体
package TagDemo; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; public class SimpleTagDemo extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { JspFragment fragment = this.getJspBody();//获取标签体 // PageContext pageContext= (PageContext) fragment.getJspContext(); // fragment.invoke(pageContext.getOut()); fragment.invoke(null); } }