background image

 
关于这段代码的说明

 

  关于 DateTag 处理程序类有几件事值得一说。首先看一下方法声明。如果我们直接实

 

现 Tag 

 

接口,那么就需要完成几个方法声明。因为 TagSupport 类是简单的、具体类,它

 

完全实现了在 Tag 接口中声明的方法,我们可以只实现那些在自定义标记中要使用的方

 

法。在这个简单的例子中,我们只实现了 doStartTag() 方法,它是在遇到开始标记时调
用的。

 

  您还可能注意到 doStartTag() 

 

方法返回 SKIP_BODY 。当然其原因是我们的简单日

 

期标记没有正文。您要注意的最后一件重要的事情是使用了 pageContext 对象访问输出

 

缓存以直接向输出流发送内容。您可能还记得在本系列以前的文章说过, pageContext 
对象是一个隐式对象,它提供对与当前页面有关的属性的访问。

 

  编写了源代码文件后,我们像编译所有其他 Java 类一样编译这个类(确保在类路径

 

中加入 Servlet/JSP JAR 文件)

 

,然后将编译的类文件放到 Web 应用程序的类目录

(WEB-INF/classes)中。如果我们开发的是几个标记或者定义有标记变量的标记,那么我

 

们就会有多个标记处理程序类。在这种情况下我们可能选择将处理程序类打包在一个 JAR 
文件中而不是使它们成为类目录中的分散的文件。
  第 2 步. 

 

创建 TLD

 

  下一步是定义包含自定义标记与处理它的 Java 类(或多个类)之间的映射的库。这个
库是在一个名为标记库描述符(TLD)  

的 XML 

 

文档中定义的。我们将从 DateTag 例子 

DateTagLib.tld

 

中调用这个 TLD

。注意 .tld”是这种文件的标准扩展名。

 

  清单 2. DateTagLib.tld 文件
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <taglib>
3    <tlibversion>1.0</tlibversion>
4    <info>A simple tag library</info>
5   <tag>
6     <name>displayDate</name>
7     <tagclass>myTags.DateTag</tagclass>
8     <bodycontent>empty</bodycontent>
9     <info>Display Date</info>
10   </tag>         
11 </taglib>
12
  DateTagLib.tld 是一个出色的、最小的标记库描述符文件。所有关键信息都包含在 
Tag 标记中,在这里映射了标记名和处理程序类,我们声明了标记对于正文内容的敏感

 

性。对于更复杂的情况,我们可以使用其他的 XML 标记以提供有关库和标记的更多信息。
在一个库中定义多个标记也很常见。
  第 3 步.   

使 TLD 和处理程序类可访问

 

  第 3 

 

步是使这个类或者这些类和 TLD 

 

可以被 Web 应用程序访问。有两种方法:可

 

以将类和 TLD 

 

打包到一个 JAR 

 

文件中,再将这个 JAR 

 

文件储存在 Web 

 

应用程序的 lib 

 

目录中,也可以将类文件分散地放到 classes 

 

子目录中并将 TLD 

 

文件放到 Web 应用程

 

序的 WEB-INF 目录下面的某一位置。

 

  在这个例子中,我们将使用第二种方法,将 TLD 

 

文件和类分散地放到 Web 应用程