2.8.2 建立TLD文件

2.8.2 建立TLD文件

TLDTag Library Definition的缩写,即标签库定义,文件的后缀是td,每个TLD文件对应一个标签库,一个标签库中可包含多个标签。TLD文件也称为标签库定义文件.
标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常可以到web容器下复制一个标签库定义文件,并在此基础上进行修改即可。例如Tomcat8.5,在\webapps\examples\WEB-INF\jsp2\路径下包含了一个jsp2-example-taglib.tld文件,这就是一个TLD文件的范例。
将该文件复制到Web应用的WEB-INF路径,或WEB-NF的任意子路径下,并对该文件进行简单修改,修改后的mytaglib.tld文件代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="GBK"?>

<taglib xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<!-- 定义该标签库的URI -->
<uri>http://www.crazyit.org/mytaglib</uri>

<!-- 定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>helloWorld</name>
<!-- 定义标签处理类 -->
<tag-class>lee.HelloWorldTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>
</taglib>

上面的标签库定义文件也是一个标准的XML文件,该XML文件的根元素是taglib元素,因此每次编写标签库定义文件时都直接添加该元素即可.

taglib标签子元素

taglib下有如下三个子元素。

  1. taglib-version:指定该标签库实现的版本,这是一个作为标识的内部版本号,对程序没有太大的作用。
  2. short-name:该标签库的默认短名,该名称通常也没有太大的用处。
  3. uri:这个属性非常重要,它指定该标签库的URI,相当于指定该标签库的唯一标识。如上面粗体字代码所示,JSP页面中使用标签库时就是根据该URI属性来定位标签库的。

tag标签子元素

除此之外,taglib元素下可以包含多个tag元素,每个tag元素定义一个标签,tag元素下允许出现如下常用子元素:

  • name:该标签的名称,这个子元素很重要,JSP页面中就是根据该名称来使用此标签的。
  • tag-class:指定标签的处理类,毋庸置疑,这个子元素非常重要,它指定了标签由哪个标签处理类来处理。
  • body-content:这个子元素也很重要,它指定标签体内容。该子元素的值可以是如下几个。
    • tagdependent:指定标签处理类自己负责处理标签体。
    • empty:指定该标签只能作为空标签使用。
    • scriptless:指定该标签的标签体可以是静态HTML元素、表达式语言,但不允许出现JSP脚本
    • JSP:指定该标签的标签体可以使用JSP脚本。
  • dynamic-attributes:指定该标签是否支持动态属性。只有当定义动态属性标签时才需要该子元素。

因为JSP2规范不再推荐使用JSP脚本,所以JSP2自定义标签的标签体中不能包含JSP脚本。所以,实际上tag元素的body-content子元素的值不可以是JSP.
定义了上面的标签库定义文件后,将标签库文件放在web应用的WEB-INF路径或任意子路径下java Web规范会自动加载该文件,则该文件定义的标签库也将生效。