原帖:http://oyprunner.iteye.com/blog/539494
http://blog.csdn.net/achun2050/article/details/1568582
- EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用
- EVAL_PAGE:继续处理页面,doEndTag()函数可用
- SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用
- SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用
- EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
- EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
- BodyTagSupport类的方法:
- 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();
- 他们执行顺序如下:
- doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()
- doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,
- 如果返回EVAL_BODY_INCLUDE则继续执行;
- 如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行,
- 而直接执行doEndTag()方法。
- setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。
- 标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,
- EVAL_PAGE或SKIP_PAGE。
- 如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;
- 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;
- 如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。
- 标签中静态常量:
- EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流
- SKIP_BODY:告诉服务器不要处理正文内容
- EVAL_PAGE:让服务器继续执行页面
- SKIP_PAGE:让服务器不要处理剩余的页面
- EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回
- EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
- EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。
SKIP_BODY隐含0 :跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE隐含1:将body的内容输出到存在的输出流中
SKIP_PAGE隐含5 : 忽略剩下的页面。
EVAL_PAGE隐含6:继续执行下面的页
---------------------------------------------------------------
后一:
doStartTag()和doEndTag()返回值是在Tag Interface里定义的静态int
SKIP_BODY隐含0
Skip body evaluation. Valid return value for doStartTag and doAfterBody. 跳过对body的处理。
就是跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE 隐含1
Evaluate body into existing out stream. Valid return value for doStartTag.
This is an illegal return value for doStartTag when the class implements BodyTag,
since BodyTag implies the creation of a new BodyContent.
将body的内容输出到存在的输出流中。包括是jsp代码,也可以被输出
SKIP_PAGE 隐含5
Skip the rest of the page. Valid return value for doEndTag.
忽略剩下的页面。
EVAL_PAGE 隐含6
Continue evaluating the page. Valid return value for doEndTag().
在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就计算标签的body
若返回SKIP_BODY就不计算标签的body
在doEndTag()方法中,若返回EVAL_PAGE容器在标签结束时继续计算jsp页面的其它部分,
若返回SKIP_PAGE则在标签结束时停止计算jsp页面其他的部分。
当你实现了BodyTag接口时,也就是你进行带body标签的开发时,有doAfterBody()方法。
当返回EVAL_BODY_TAG时,表示继续计算一次BodyTag,直到返回SKIP_BODY才会调用doEndTag()方法在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就计算标签的body
若返回SKIP_BODY就不计算标签的body
EVAL_BODY_INCLUDE隐含1:将body的内容输出到存在的输出流中
SKIP_PAGE隐含5 : 忽略剩下的页面。
EVAL_PAGE隐含6:继续执行下面的页
---------------------------------------------------------------
后一:
doStartTag()和doEndTag()返回值是在Tag Interface里定义的静态int
SKIP_BODY隐含0
Skip body evaluation. Valid return value for doStartTag and doAfterBody. 跳过对body的处理。
就是跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE 隐含1
Evaluate body into existing out stream. Valid return value for doStartTag.
This is an illegal return value for doStartTag when the class implements BodyTag,
since BodyTag implies the creation of a new BodyContent.
将body的内容输出到存在的输出流中。包括是jsp代码,也可以被输出
SKIP_PAGE 隐含5
Skip the rest of the page. Valid return value for doEndTag.
忽略剩下的页面。
EVAL_PAGE 隐含6
Continue evaluating the page. Valid return value for doEndTag().
在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就计算标签的body
若返回SKIP_BODY就不计算标签的body
在doEndTag()方法中,若返回EVAL_PAGE容器在标签结束时继续计算jsp页面的其它部分,
若返回SKIP_PAGE则在标签结束时停止计算jsp页面其他的部分。
当你实现了BodyTag接口时,也就是你进行带body标签的开发时,有doAfterBody()方法。
当返回EVAL_BODY_TAG时,表示继续计算一次BodyTag,直到返回SKIP_BODY才会调用doEndTag()方法在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就计算标签的body
若返回SKIP_BODY就不计算标签的body