JSP JSTL 自定义标签开发步骤

1、    Web容器执行自定义标签开始标记时,会调用标签处理器的doStartTag()。可以通过该方法返回的不同的值来控制后续的行为:
是否执行标签体中的内容。
是直接输出标签体的执行结果,还是将标签体的执行结果输出到一个缓冲区对象中,从而可以让后续的时间方法对标签体的执行结果进行修改和控制其输出。
2、    Web容器执行完开始标记后,执行标签体,标签体执行完成后调用doAfterBody()方法。该方法用于标签体执行完后的行为,这个方法可以返回不同的值来控制是否再次重复执行标签体。
3、    Web容器执行完自定义标签体后,会执行自定义标签的结束标记,此时会执行doEndTag()方法。用于处理遇到结束标记这个事件,通过不同的值来控制Web容器是否执行JSP页面中位于结束标记后面的内容。

8.3    自定义标签API
8.3.1    JspTag接口
是所有自定义标签的父接口,Tag 接口和SimpeTag 是其直接子接口。
8.3.2    Tag接口
Tag接口是传统标签的父接口,定义了两个重要方法doStartTag()、doEndTag() ;四个常量(EVAL_BODY_INCLUDE、SKIP_BODY、EVAL_PAGE、SKIP_PAGE )。
1、    调用doStartTag() 方法执行后向Web容器返回常EVAL_BODY_INCLUDE、SKIP_BODY 。返回EVAL_BODY_INCLUDE 则执行自定义标签的标签体;返回SKIP_BODY则忽略自定义标签的标签体,直接解释执行自定义标签的结果标记。
2、    调用doEndTag() 方法、执行后向Web容器返回常量EVAL_PAGE、SKIP_PAGE 。返回EVAL_PAGE 则执行JSP页面位于结束标记后面的JSP代码、返回SKIP_PAGE则忽略JSP页面中位于结束标记后面的所有内容,例如<jsp:forward> 标签。

8.3.3    IterationTag接口
IterationTag继承Tag接口,并增加了doAfterBody() 方法和EVAL_BODY_AGAIN 常量。能通知Web容器是否重复执行标签体内容。当调用doAfterBody() 方法返回EVAL_BODY_AGAIN 时,会重复执行标签,知道返回SKIP_BODY,Web容器才会处理标签的结束标记和调用doEndTag()
8.3.4    BodyTag接口
BodyTag接口继承自IterationTag 接口,增加2个方法setBodyContent()、doInitBody() 方法和EVAL_BODY_BUFFERED 常量。当doStartTag()方法返回EVAL_BODY_BUFFERED 常量时,Web容器会创建专门用于捕获标签体运行结果的BodyContent 对象,然后调用标签处理器的setBodyContent()BodyContent 对象传入标签处理器,Web容器将标签体的执行结果写入BodyContent 对象中。在标签处理器的后续事件方法中,可以通过保存的BodyContent 的对象的引用来获取标签体的执行结果,然后调用BodyContent对象特有的方法对BodyContent对象的内容进行修改和控制。
注:JSP API提供BodyTag接口的实现类BodyTagSupportBodyTagSupport 类实现的BodyTagSupport类的doStartTag方法的返回值为EVAL_BODY_BUFFERED。doAfterBody() 返回值为SKIP_BODY,doEndTag() 返回值为EVAL_PAGE
8.3.5    SimpleTag接口
SimpleTag接口为JSP2.0新增标签接口,在SimpleTag中之定义了一个用于处理标签逻辑的doTag()方法,该方法在Web容器执行自定义标签时调用,而且只调用一次即完成传统标签的是否执行标签体、迭代标签等功能。
SimpleTagSupport类是SimpleTag接口的实现类。
8.4    自定义标签基本使用
8.4.1    Tag接口
1、    Tag接口静态常量EVAL_BODY_INCLUDE、SKIP_BODY、EVAL_PAGE、SKIP_PAGE
2、    方法:setPageContext()、setParent()、doStartTag()、doEndTag()、release()

可以在attribute元素的rtexprvalue 子元素指定JSP是否为动态元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值