1. jsp自定义标签组成部分:web.xml加载标签库,标签库描述文件(tld),标签处理程序类。
2. 在自定义标签的起始和结束标签之间的部分为标签体(Body)。
3. 分别介绍一下jsp自定义标签的三个组成部分,以输出经典的 helloworld为例。
Ⅰ.修改web.xml加载标签库
Ⅱ.描述标签库文件(tld)
tld文件通过 MyEclipse 可以新建获得,按照MyEclipse提示一步步走就可以。
<description><![CDATA[也可以这么描述]]></description>
Ⅲ.标签处理类
需要继承TagSupport 或者BodyTagSupport
区别就是 主要看标签处理类是否要读取标签体的内容和改变标签体返回的内容,如果不需要就用TagSupport,否则就用BodyTagSupport
一、关于执行方法
无论继承哪个类,都可能需要重写这么几个方法,它们的执行顺序是:
doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag();
除了setBodyContent()方法之外,其它几个方法都有一个 int 类型的常量返回值,有以下这么几种情况:
EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用。
EVAL_PAGE:继续处理页面,doEndTag()函数可用。
SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用。
SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用。
EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tagbody,
如果类实现了BodyTag,那么doStartTag()可用该返回值,否则非法。
-------------也必须要实现方法setPageContext(PageContext arg0)
EVAL_BODY_AGAIN:请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag的时候是很有用的。
在执行方法中主要会到以下执行语句,至于标签属性,会跟标签执行类的属性相同。
JspWriter jw = pageContext.getOut();
jw.print(sb.toString());
//得到标签体内容
因为实现了接口BodyTag,实现了方法setBodyContent(BodyContext arg0)
所以就得到了 bodyContext 对象
标签体的内容可以这么获取:this.bodyContent.getString()
二、关于执行属性
标签类的属性和标签中的属性名字要一致,并且标签类中要有相应的set,get方法。