Tag文件与Tag标记

3.1 Tag文件

    Tag 文件是扩展名为.tag的文本文件,其结构和JSP文件类似。一个Tag文件中可以有普通的HTML标记符、某些特殊的指令标记(见3.4节)、成员变量声明和方法的定义、Java程序片和Java表达式。

    以下是一个简单的Tag文件oddNumberSum.tag,负责计算100内的全部奇数的代数和

3.1.2 Tag文件的保存
    Tag文件所在
    Tag 文件可以实现代码的复用,即Tag 文件可以被许多JSP页面使用。为了能让一个Web 应用中的JSP页面使用某一个Tag 文件,必须把这个Tag文件存放到Tomcat 服务器指定的目录中,也就是说,如果某个Web服务目录下的JSP页面准备调用一个Tag文件,那么必须在该Web服务目录下,建立如下的目录结构:

     其中的WEB-INF(字母大写)和tags都是固定的目录名称,而tags下的子目录的名称可由用
户给定。

    一个 Tag 文件必须保存到tags目录或其下的子目录中。这里把3.1.1节中的oddNumberSum.tag保存到ch3\WEB-INF\tags目录中。  

      保存Tag 文件时按照Tag 文件指定的编码保存.

 

 

 

3.2 Tag标记

3.2.1 Tag标记与Tag文件

   某个Web服务目录下的Tag文件只能由该Web服务目录中的JSP页面调用,JSP页面必须通过Tag标记来调用一个Tag文件。
    Tag 标记的名字和Tag文件的名字一致,也就是说,当我们编写了一个Tag文件并保存到特定目录中后(见3.1.2节),也就给出了一个Tag标记,该标记的格式为:

<Tag 文件的名字/>

<Tag 文件的名字>其他内容(称为标体内容)</Tag文件的名字>

3.2.2 Tag标记的使用

一个JSP页面通过使用Tag标记来调用一个Tag文件。Web服务目录下的一个JSP面面在使用Tag标记来调用一个Tag文件之前,必须首先使用taglib指令标记引人该Web服务目录下的标记库,只有这样,JSP页面才可以使用Tag标记调用相应的Tag文件。
taglib 指令的格式如下:

<%@taglib tagdir="标记库的位置" prefix="前缀">

例如:

<%@taglib tagdir="/WEB-INF/tags" prefix="computer"%>

     引入标记库后,JSP页面就可以使用带前缀的Tag标记调用相应的Tag文件,其中的前级由< taglib>指令中的prefix属性指定。例如JSP如下使用Tag标记调用相应的Tag文件:

< computer:oddNumberSum />

     taglib 指令中的prefix给出的前级由用户自定义,其好处是,通过前缀可以有效地区分不同标记库中具有相同名字的标记文件。

注:JSP页面使用Tag标记时,冒号;的左右不要有空格。

例3_1中的JSP页面使用Tag标记调用oddNumberSum.tag(该Tag文件见3.1.1节)计算100之内的奇数和。

目录如图所示:将上面得代码放进WEB-INF中得tags目录下。

  实验结果:

 

3.3 Tag中得常见指令

3.3.1 tag指令

Tag 文件中的tag指令类似于JSP文件中的page指令。Tag 文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理和表示。tag指令的语法如下:

<%@tag属性1=“属性值”属性2="属性值”…属性n=“属性值”%>

在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:

<%@ tag属性 1="属性值”%>

<%@ tag属性 2="属性值”%>

......
<%@ tag属性n=“属性值”%>

① languagc 属性
language 属性的值指定Tag 文件使用的脚本语言,目前只能取值Java,其默认值就是
Java,因此在编写Tag文件时,没有必要使用tag指令指定language属性的值。
② import 属性
import 属性的作用是为Tag文件引人包中的类,这样就可以在Tag文件的程序片部分变量及方法定义部分、表达式部分使用包中的类。import属性可以取多个值,import 属性翼认已经有如下值:"java. lang.*""javax. servlet.*""javax.servlet.jsp.*""javat servlet. http. *"
③ pageEncoding
该属性指定 Tag 文件的字符编码,其默认值是 ISO-8859-1。目前,为了避免显示信息片
现乱码现象,Tag文件需要将该属性值设置为UTF-8。

3.3.2 include指令
     在Tag文件中也有 和JSP类似的include指令,其使用方法与JSP文件中include指令标记类似。

3.3.3 attribute指令
     Tag 文件充当着可复用代码的角色,如果一个Tag文件允许使用它的JSP页面向该Ta文件传递数据,就使得Tag文件的功能更为强大。在Tag文件中通过使用attribute指令让使用它的JSP页面向该Tag 文件传递需要的数据。attribute指令的格式如下:

<%@attribute name="对象名字"required="true"/"false"type="对象的类型”%>

例如 Tag 文件 myTag.tag中有如下attribute指令:

<%@ attribute name = "result" required = "true" type = "java. lang. Double"%>

    那么就相当于Tag 文件中有了一个名字是result的对象,但Tag文件不需要创建该对象result,而是等待JSP页面将一个Double型的对象的引用传递给result。
    attribute指令中的name属性是必需的,该属性的值是一个对象的名字。JSP页面在调用Tag文件时,可向name属性指定的对象传递一个引用。需要特别注意的是,type在指定对象类型时,必须使用包名,比如,不可以将java.lang.Double简写为Double。如果attribute 指令中没有使用type指定对象的类型,那对象的类型默认是java. lang.String类型
    JSP 页面使用Tag标记向所调用的Tag文件中name 指定的对象传递一个引用,方式
如下:

<前缀:Tag 文件名字 对象名字="对象的引用”/>
 

 3.3.4 variable指令
      Tag文件通过使用attribute指令,可以使得调用该Tag文件的JSP页面动态地向其传数据:在某些Wcb应用中,JSP页面不仅希望向Tag 文件传递数据,而且希望Tag 文件能回数据给JSP页面。比如,许多JSP页面可能都需要调用某个Tag文件对某些数据进行基>的处理,但不希望Tag文件做进一步的特殊处理以及显示数据,因为各个JSP页面对数据白进一步处理或显示格式的要求是不同的。因此,JSP页面希望Tag文件将数据的基本处理给果存放在某些对象中,将这些对象返回给当前JSP页面即可。
Tag 文件通过使用variable 指令可以将Tag 文件中的对象返回给调用该 Tag 文件的JSP页面。

1. variable指令的格式

variable指令的格式如下:

<4@variable name-given="对象名”variable-class="对象类型”scope="有效范围”%>    

       variable 指令中属性 name - given 的值就是 Tag 文件返回给 JSP 页面的对象。该对象的名字必须符合标识符规定,即名字可以由字母、下画线、美元符号和数字组成,并且第一个字符不能是数字字符。 variable 指令中属性 variable - class 的值是返回的对象的类型,对象的类型必须带有包名,比如 java . lang . Double 、 java . time . LocalDate 等类型。如果 variable 指令中没有使用 variable - class 给出对象的类型,那么对象的类型是 java . lang . String 类型。
      variable 指令中 scope 属性的值指定对象的有效范围, scope 的值可以取 AT _ BEGIN 、 NESTED 和 AT _ END 。当 scope 的值是 AT _ BEGIN 时, JSP 页面一旦开始使用 Tag 标记,就得到了 variable 指令返回给 JSP 页面的对象, JSP 页面就可以在 Tag 标记的标记体中或 Tag 标记结束后的各个部分中使用 variable 指令返回给 JSP 页面的对象。当 scope 的值是 NESTED 时, JSP 页面只可以在 Tag 标记的标记体中使用 variable 指令返回给 JSP 页面的对象。当 scope 的值是 AT _ END 时, JSP 页面只可以在 Tag 标记结束后。才可以使用 variable 指令返回给 JSP 页面的对象。

2.对象的返回
Tag 文件为了给JSP页面返回一个对象,就必须将返回的对象的名字以及该对象的引用存储到Tomcat 服务器提供的内置对象jspContext中。Tag文件只有将对象的名字及其引用存储到jspContext中,JSP页面才可以使用该对象。比如,Tag 文件的variable指令:

<%@ variable name - given =" time " variable - class =" java . time . LocalDate " scope =" AT _ END "%>

为 JSP 页面返回名字是 time 的 LocalDate 对象。那么 Tag 文件中必须让 jspContext 调用
 

setAttribute ("对象名",对象的引用);


方法存储名字是 time 的对象以及该对象的引用,例如:

jspContext . setAttribute (" time ", LocalDate . now ());

将名字是 time 的 LocalDate 对象存储到 jspContext 中。

3.3.5 taglib 指令
JSP 页面或 Tag 文件都可以使用 taglib 指令引入标记库(如前面各个例子所示)。 taglib 指令格式如下:

<%@ taglib tagdir ="自定义标记库的位置" prefix ="前缀">

一个 Tag 文件也可以使用几个 taglib 指令标记引入若干个标记库,例如:

<%@ taglib tagdir ="/ WEB - INF / tags " prefix =" beijing "%>
<%@ taglib tagdir ="/ WEB - INF / tags / tagsTwo " prefix =" dalian "%>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值