Tag文件与Tag标记
前言
本章主要是对tag文件以及tag标记的介绍,包含tag文件的常用指令等。
Tag文件
Tag文件的结构
Tag文件是拓展名为.tag的文本文件,结构和JSP文件类似。其中可以有普通的HTML标记符、某些特殊指令标记、成员变量和方法的定义、Java程序片和Java表达式。
Tag文件的保存
1、Tag文件所在目录
为了能让web应用中的JSP页面使用某一个Tag文件,需要把该Tag文件保存到Tomcat服务器指定的目录中:
Web服务目录\WEB-INF\tags
例如:
ch3\WEB-INF\tags
2、Tag文件的编码
保存Tag文件时按照Tag文件指定编码保存,例如:
<%@ tag pageEncoding=“utf-8”%>
指定为UTF-8,因此需要在保存时将“保存类型“选择为”所有文件(.)“,将”编码(E)"选择为“UTF-8”.
Tag标记
Tag标记与Tag文件
JSP页面必须通过Tag标记来调用一个Tag文件。
Tag标记的名字和Tag文件的名字一致,也就是说,编写完一个Tag文件并保存到特定目录后就给出了一个Tag标记,格式为:
<Tag文件的名字 />
或
<Tag文件的名字>其他内容(称为标体内容)</Tag文件的名字>
Tag标记的使用
Web服务目录下的一个JSP页面必须首先使用taglib指令标记引入该Web服务目录下的标记库,这样才能使用Tag标记调用相应的Tag文件。taglib指令格式如下:
<%@ taglib tagdir=“标记库的位置” prefix=“前缀”>
taglib指令中的prefix给出的前缀由用户自定义,其好处时,通过前缀可以有效区分不同标记库中具有相同名字的标记文件。
Tag标记的运行原理
如果该Tag标记对应的Tag文件是首次被JSP页面调用,那么Tomcat服务器会将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件。
如果该Tag文件已经被转编译为字节码文件,Tomcat服务器将直接执行这个字节码文件。
如果对Tag文件进行了修改,那么Tomcat服务器会重新将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件。
Tag文件中的常用指令
include指令
使用方法和作用与JSP文件中的include指令标记类似。
attribute指令
在Tag文件中通过使用attribute指令让使用它的JSP页面向该Tag文件传递需要的数据。
<%@ attribute name=“对象名字” required=“true”|“false” type=“对象的类型” %>
attribute指令中的name属性是必需的,该属性的值是一个对象的名字。JSP页面在调用Tag文件时,可向name属性指定的对象传递一个引用。
variable指令
Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。
1、variable指令的格式
<%@ variable name-given=“对象名” variable-class=“对象类型” scope=“有效范围” %>
属性name-given的值就是Tag文件返回给JSP页面的对象,该对象名字必须符合标识符规定。variable-class的值是返回的对象的类型,对象的类型必须带有包名。
2、对象的返回
Tag文件为了给JSP页面返回一个对象,就必须将返回的对象的名字以及该对象的引用存储到Tomcat服务器提供的内置对象jspContext中。Tag文件只有将对象的名字及其引用存储到jspContext中,JSP页面才可以使用该对象。比如:
<%@ variable name-given=“time” variable-class=“java.time.LocalDate” scope="AT_END”>
为JSP页面返回名字是time的LocalDate对象。那么Tag文件中必须让jspContext调用
setAttribute(“对象名”,对象的引用);
3、aglib指令
JSP页面或Tag文件都可以使用taglib指令引入标记库(如前面各个例子所示)。taglib指令格式如下:
<%@ taglib tagdir =“自定义标记库的位置” prefix=“前缀”>
一个Tag文件也可以使用几个taglib指令标记引入若干个标记库。