常用接口调用方式 java调用接口的方法流程

【常用接口调用方式 java调用接口的方法流程】在自定义标签的开发过程中 , 有时需要对标签体的内容进行重复处理 , 这时 , 可以使用IterationTag接口 , 它继承自Tag 接口 , 在Tag接口基础上新增了一个 EVAL_BODY_AGAIN常量和一个 doAfterBody()方法 , 具体如下 。

常用接口调用方式 java调用接口的方法流程

文章插图
1. EVAL_BODY_AGAIN常量
EVAL_BODY_AGAIN常量是doAfterBody()方法的返回值 , 如果doAfterBody()方法返回该常量 , JSP容器会把标签体的内容重复执行一次 。
2. int doAfterBody()方法
JSP容器在每次执行完标签体后会调用doAfterBody()方法 , 该方法可以返回常量SKIP_BODY和EVAL_BODY_AGAIN 。如果方法返回SKIP_BODY常量 , JSP容器回执行代表结束的标签的doEndTag()方法 , 如果返回EVAL_BODY_AGAIN , 则重复执行标签体 。
为了让读者更好地学习IterationTag接口 , 接下来通过一个案例演示如何使用IterationTag接口实现重复执行标然休的功能 , 具体步骤如下 。
(1)编写标签处理器类 。
建Web工程chapter1 , 并在工程下编写标签处理器类Iterate.java 。由于TagSupport类实现了IterationTag接口 , 为了简化程序的编写 , 我们定义的标签处理器类只需继承TagSupport类即可 , Iterate.java类的实现代码如下代码所示 。
package cn.itcast.chapter01.classisctag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.*;public class Iterate extends TagSupport {//定义变量private int num;
//提供num属性的setter方法public void setNum(int num) {this.num = num;}
//执行一次标签体public int doStartTag() throws JspException {return Tag.EVAL_BODY_INCLUDE;}
//根据属性值对标签体进行执行public int doAfterBody() throws JspException {num–;if (num > 0) {return EVAL_BODY_AGAIN;} else {return SKIP_BODY;//跳过标签体}}}
在上面代码中,成员变量num用于接收标签num属性的值 , 用来决定标签体的执行次数 。由于doStartTag()方法的返回值为EVAL_BODY_INCLUDE , 在执行doAfterBody()方法之前 , 标签体已经执行了一次 , 因此在doAfterBody()方法中判断if条件之前先将num的值自减一次 。
(2)注册标签处理器类 。
在mytag.tld文件中增加一个Tag元素 , 对标签处理器类进行注册 , 注册信息如下所示 。
<tag><name>iterate</name><tag-class>cn.itcast.chante-01.c1assisctaa.Iterate</tag-class><body-content>JSP</body-content><attribute><name>num</name><required>true</required></attribute></tag>
(3)编写JSP页面iterate.jsp 。
在JSP页面中使用标签 , 将num属性的值设置为5 , 同时将标签体的内容设置为“hello.itcast!”。iterate.jsp页面如上面所示 。
<%@page language=\\\\\\”java\\\\\\” pageEncoding=\\\\\\”GBK\\\\\\”%><%@taglib uri=\\\\\\”http://www.itcast.cn\\\\\\” prefix= \\\\\\”itcast\\\\\\”%><html><head><title>iterate Tag</title></head><body><itcast:iterate num=\\\\\\”5\\\\\\”>hello,itcast!<br/></itcast:iterate></body></html>
(4)启动Tomcat服务器 , 在浏览器地址栏中输入“http://localhost:8080/chapter01/iterate.jsp”访问iterate.jsp页面 , 可以发现 , 在浏览器中标签体内容“hello , itcast!”显示了5遍 。说明编写的自定义标签实现了重复执行标签体的功能 。