购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.3 自定义JSP标签

自定义标签是用户定义的JSP语言元素,通过封装反复执行的代码使之可以在多个应用程序中重复使用,从而提高开发效率。它在处理网页内容的数据及易用性方面比JavaBean都要出色,因此熟练掌握自定义JSP标签是一名优秀JSP程序员所必需的技能。

5.3.1 TagSupport类

TagSupport类实现了Tag接口,为我们提供了4个重要的方法,见表5-5。

表5-5 TagSupport类中的常用方法

5.3.2 BodyTagSupport类

BodyTagSupport类继承了TagSupport 类并实现了BodyTag接口,可以处理标签体内容。BodyTagSupport类重新定义了doStartTag()生存周期方法以返回EVAL_BODY_ BUFFER- ED。通过返回EVAL_BODY_BUFFERED,doStartTag() 请求创建一个新的缓冲区(BodyContent)。

BodyContent是一个包含运行时正文判断结果的缓冲区。BodyContent继承了JspWriter并作为标签正文的隐式out。因此,JSP 容器创建BodyContent的一个实例,并且在处理标签的正文内容时,它写入这个实例而不是根JspWriter 中。在标签中使用隐式对象out时,实际上使用的是BodyContent对象而非JspWriter。

可以从BodyContent得到判断后的正文,它是一个String。BodyContent是在运行时由容器调用页面的pageContext的pushBody()和popBody()方法创建的(只有在doStartTag()返回EVAL_BODY_BUFFERED时才调用pushBody())。因此,BodyContent是在JspWriter和BodyContent的一个嵌套结构中的(外面的out可以是另一个BodyContent对象,因为BodyContent是一个JspWriter)。通过setBodyContent()方法将 BodyContent提供给正文标签处理程序。向正文标签处理程序传递一个BodyContent 实例(通过 setBodyContent())并可以决定如何处理它。

BodyTagSupport类除了拥有TagSupport类的上述方法外,还增加了几个方法,见表5-6。

表5-6 BodyTagSupport类中新增的方法

5.3.3 标签库描述文件

采用了XML文件格式的标签库描述文件(TLD)定义了用户的标签库,TLD文件中常用的元素有以下 4 个。

1.标签库元素<taglib>

<taglib>元素用来设置整个标签库的相关信息,如:

2.标签元素<tag>

<tag>元素用来定义一个标签,它是<taglib>元素的子元素,如:

3.标签属性元素<attribute>

<attribute>元素用来定义标签的属性,它是<tag>元素的子元素,如:

4.标签变量元素<variable>

<variable>元素用来定义标签的变量,它是<tag>元素的子元素,如:

5.3.4 自定义JSP标签的一般步骤

在Java Web应用中自定义JSP标签的一般经过 4 个步骤。

(1)编写标签处理类,如:

(2)创建标签库描述符(TLD),如:

(3)在JSP页面中引用标签库,如:

<%@ taglib prefix='mytag' uri='http://www.e868.net/mytag'%>

(4)在JSP页面中使用标签,如:

<mytag:echo msg='刘斌,你好!'/>

<mytag:echo msg='<%=(new Date()).toString()%>'/>

5.3.5 自定义JSP标签的应用实例

本实例中分别创建3个自定义JSP标签:信息显示标签echo、格式化日期标签formatdate和转换大写标签touppercase。

首先创建信息显示标签的处理类Echo.java(见例程5-11)、格式化日期标签的处理类FormatDate.java(见例程5-12)和转化大写标签的处理类ToUpperCase.java(见例程5-13)。

然后创建标签库描述文件mytaglib.tld(见例程5-14),并在mytaglib.tld中分别描述信息显示标签echo、格式化日期标签formatdate和转换大写标签touppercase。

最后创建一个使用自定义标签的JSP测试页面index.jsp(见例程5-15)。

例程5-11 信息显示标签的处理类Echo.java

例程5-12 格式化日期标签的处理类FormatDate.java

例程5-13 转化大写标签的处理类ToUpperCase.java

例程5-14 标签库描述文件mytaglib.tld

例程5-15 使用自定义标签的JSP页面index.jsp

运行效果如图5-5所示。

图5-5 index.jsp运行效果

本实例的完整源代码请参考配套光盘的“源代码”部分。 rt6jvNINlVjeBLXW8urgCZUm0R8PYocKHBHm3EWUS5o1jEMHqfC6DuLLDo3Sf7Nr

点击中间区域
呼出菜单
上一章
目录
下一章
×