自定义标签主要用于移出JSP页面中的Java代码。
移出JSP页面中的Java代码,主要要完成两个步骤:
1、编写一个实现Tag接口的Java类,并覆盖doStartTag,把jsp页面中的Java代码写到doStartTag方法中。
2、编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。
3、完成以上操作,即可在JSP页面中导入和使用自定义标签。查看tag接口API文档,分析自定义标签的执行流程:
JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例化对象,然后按照JSP规则定义的通信规则依次调用它的方法。
1、JSP引擎实例化处理器后,将调用setPageContext()方法将JSP页面的pageContext对象穿递给标签。
2、依次调用setParent(),doStartTag(),doEndTag(),通常还会调用release();
自定义标签还可用于完成一些页面逻辑:
1、 Jsp页面某部分内容是否执行。
2、 标签后的Jsp页面是否执行
3、Jsp页面某部分内容重复执行
4、修改Jsp页面内容输出
实现SimpleTag接口的标签通常称为简单标签。共定义5个方法:
setJspContext():用于把JSP页面的PageContext对象传递给标签处理器对象
setParent():用于把父标签处理器对象传递给当前标签处理器对象,
getParent():用于获取当前标签的父标签处理器对象,
setJspBody():用于把代表标签体的Jsp,
doTag():用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTage()中可以抛出javax.Servlet.jsp.SkipPageExcpetion异常,
用于通知WEB容器不再执行JSP页面中位于结束标记后面的内面,等效于在传统标签的doEndTag()中返回Tag.SKIP_PAGE常量的情况。
JspFragment类
WEB容器在处理简单标签的标签体式,会把标签容器用一个JspFragment对象表示,并调用标签处理对象的setJspBody()把JspFragment对象传递给标签处理器对象。
getJspContext():用于返回代表调用页面的JspContext对象
public abstract void invoke(java.io.Writer out):
1、用于执行JspFragment对象所代表的JSP代码片段
2、参数out用于指定将JSpFragment对象执行结果写入到那个输出流对象中,如果传递非参数out的值为null,则将执行结果写入到JspContext.getOut()返回的输出流对象中。