2.11.3 Tag File支持
2.11.3 Tag File支持
Tag File
是自定义标签的简化用法,使用Tag File
可以无须定义标签处理类和标签库文件,但仍然可以在JP
页面中使用自定义标签。
Tag File建立一个迭代器标签
下面以Tag File
建立一个迭代器标签,其步骤如下。
建立Tag文件
在JSP
所支持Tag File
规范下,Tag File
代理了标签处理类,它的格式类似于JSP
文件。可以这样理解:如同JSP
可以代替Servlet
作为表现层一样,Tag File
则可以代替标签处理类。Tag File
具有以下5个编译指令。
taglib
:作用与JSP
文件中的taglib
指令效果相同,用于导入其他标签库。include
:作用与JsP
文件中的include
指令效果相同,用于导入其他JSP
或静态页面tag
:作用类似于JsP
文件中的page
指令,有pageEncoding
、body-content
等属性,用于设置页面编码等属性。attribute
:用于设置自定义标签的属性,类似于自定义标签处理类中的标签属性variable
:用于设置自定义标签的变量,这些变量将传给JSP
页面使用。
iterator.tag
下面是迭代器标签的Tag File
,这个Tag File
的语法与JSP
语法非常相似
1 | <%@ tag pageEncoding="UTF-8" import="java.util.List"%> |
Tag File只生成HTML片段
上面的页面代码中的粗体字代码就是Tag File
的核心代码,可能细心的读者会发现上面的Tag File
并不会输出完整的HTML
页面,它只包含一个table
元素,即只有一个表格,这是正确的。
回忆自定义标签的作用:通过简单的标签在页面上生成一个内容片段。同理,这个Tag File
也只负责生成一个页面片段,所以它并不需要输出完整的HTML
页面。Tag File
的命名必须遵守如下规则:tagName.tag
。即Tag File
的主文件名就是标签名,文件名后缀必须是.tag
。
将该文件存在web
应用的某个路径下,这个路径相当于标签库的URI
名。这里将其放在/WEB-INF/tags
下,即此处标签库路径为/WEB-INF/tags
先导入标签库 再使用标签
在页面中使用自定义标签时,需要先导入标签库,再使用标签。使用Tag File
标签与普通自定义标签的用法完全相同,只是在导入标签库时存在一些差异。由于此时的标签库没有URI
,只有标签库路径。因此导入标签时,使用如下语法格式
1 | <%@ taglib prefix="tagPrefix" tagdir="path" %> |
prefix
与之前的taglib
指令的prefix
属性完全相同,用于确定标签前缀;tagdir
标签库路径下存放很多TagFile
,每个TagFile
对应一个标签。
useTagFile.jsp
下面是使用Tag File
标签的JSP
页面代码。
1 | <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %> |
从上面的代码可以看出,在JSP
页面中使用Tag File
标签也很简单。在该JSP
页面中,使用了如下代码导入标签:
1 | <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> |
即以tags
开头的标签,使用/WEB-INF/tags
路径下的标签文件处理。
在JSP
页面中则使用如下代码来使用标签:
1 | <tags:iterator bgColor="#99dd99" cellColor="#9999cc" |
tags
表明该标签使用/WEB-INf/tags
路径下的TagFile
来处理标签;iterator
是标签名,即使用/WEB-INf/tags
路径下的iterator.tag
文件负责处理该标签。
useTagFile.jsp
页面最终的执行效果如图2.48所示。
Tag File
是自定义标签的简化。事实上,就如同JSP
文件会编译成Servlet
一样,TagFile
也会编译成标签处理类,自定义标签的后台依然由标签处理类完成,而这个过程由容器完成。
打开Tomcat
的work\Catalina\localhost\jsp2\org\apache\jsp\tag\web
路径,即可看到iterator_tag.java
、iterator_tag.class
两个文件,这两个文件就是Tag File
所对应的标签处理类。
通过查看iterator_tag.java
文件的内容不难发现,Tag File
中只有如下几个内置对象。
request
:与JSP
脚本中的request
对象对应。response
:与JSP
脚本中的response
对象对应。session
:与JSP
脚本中的session
对象对应application
:与JSP
脚本中的application
对象对应。config
:与JSP
脚本中的config
对象对应out
:与JSP
脚本中的out
对象对应