Tag接口
Tag接口是所有传统标签的父接口,它定义了四个int类型的静态常量和六个抽象方法,具体如表1和表2所示。
表1 Tag接口的静态常量
静态常量 | 功能描述 |
---|---|
EVAL_BODY_INCLUDE | doStartTag()方法的返回值,表示标签体会被执行 |
SKIP_BODY | doStartTag()方法的返回值,表示标签体不被执行 |
EVAL_PAGE | doEndTag()方法的返回值,表示标签后面余下的JSP页面继续执行 |
SKIP_PAGE | doEndTag()方法的返回值,表示标签后面余下的JSP页面不被执行 |
表1中的常量都是标签处理器方法的返回值,服务器根据方法的返回值来决定标签体和JSP页面是
否执行。接下来,我们针对Tag接口中定义的方法进行讲解,如表2所示。
表2 Tag接口的抽象方法
方法声明 | 功能描述 |
---|---|
void setPageContext(PageContext pc) | JSP容器实例化标签处理器后,调用setPageContext()方法将JSP页面的内置对象pageContext对象传递给标签处理器,标签处理器可以通过pageContext对象与JSP页面进行通信 |
void setParent(Tag t) | 调用setPageContext()方法后,JSP容器会调用setParent()方法将当前标签的父标签处理器对象传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent()方法的参数为null |
Tag getParent() | 返回当前标签的父标签处理器对象,如果当前标签没有父标签则返回null |
int doStartTag() | 当JSP容器解析到自定义标签的开始标签时,会调用doStartTag()方法,该方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY两个常量,如果使用Tag的子接口BodyTag,还可以使用BodyTag.EVAL_BODY_BUFFERED常量。 |
int doEndTag() | 当JSP容器解析到自定义标签的结束标签时,会调用doEndTag()方法,该方法可以返回EVAL_PAGE和SKIP_PAGE两个常量 |
void release() | JSP容器在标签处理器对象被作为垃圾回收之前调用release()方法,以便释放标签处理器所占用的资源 |
Tag接口定义了JSP页面与标签处理器之间的通信规则,当JSP容器将JSP页面翻译成Servlet源文件时,如果遇到JSP标签,会创建标签处理器类的实例对象,然后依次调用标签处理器的setPageContext()方法、setParent()方法、doStartTag()方法、doEndTag()方法和release()方法,因此,在实现Tag接口时,需要对这些抽象方法进行实现。