Tag文件和Tag标记

 

1 Tag文件的结构

Tag文件

扩展名为.tag的文本文件

结构几乎和JSP文件相同

一个Tag文件中可以有

普通的HTML标记符

某些特殊的指令标记(与JSP指令、动作标记对应)

成员变量和方法

Java程序片

Java表达式。

AddSum.tag

<p>这是一个Tag文件,负责计算1~100内的奇数之和:

<% int sum=0,i=1;

for(i=1;i<=100;i++)

{ if(i%2==1) sum=sum+I; }

out.println(sum);

%>

EvenSum.tag

<p>这是一个Tag文件,负责计算1~100内的偶数之和:

<% int sum=0,i=1;

for(i=1;i<=100;i++)

{ if(i%2==0) sum=sum+I; }

out.println(sum);

%>

2 Tag文件的存储目录

确定的Tag文件存放目录

引用Tag文件的JSP页面:Web服务目录

Tag文件存放目录:Web服务目录\WEB-INF\tags

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

注意:Tag文件必须使用ANSI编码保存

3 Tag标记

1)Tag文件的调用

某个Web服务目录下的Tag文件只能由该Web服务目录(包括该Web服务目录的子目录)中的JSP页面调用

JSP页面必须通过Tag标记调用Tag文件

2)Tag标记

伴随着Tag文件产生,编写完Tag文件并保存到特定目录后,就自定义出了一个Tag标记,其格式为:

<Tag文件名字/>

<Tag文件名字>

标记体

</Tag文件名字>

2)Tag标记

自定义标记库:简称标记库,存放在同一目录中的若干个Tag文件所对应的Tag标记的全体

3)Tag标记的使用

第一步:使用taglib指令标记引入该Web服务目录下的标记库

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

一个JSP页面可以使用几个taglib指令标记引入若干个标记库

<%@taglib tagdir=“/WEB-INF/tags” prefix="beijing"%>

%@taglib tagdir=“/WEB-INF/tags/geng” prefix=“dalian"%

第二步:使用带有前缀的Tag标记调用相应的Tag文件,其中的前缀由taglib指令中的prefix属性指定。如:

<beijing:AddSum/>

<dalian:EvenSum/>

前缀:通过前缀可以有效地区分不同标记库中具有相同名字的标记文件。

JSP引擎处理JSP页面中的Tag标记的原理如下:

①首次调用Tag文件:JSP引擎会将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件实现Tag文件的动态处理,最后将有关结果发给用户端

②再次调用,若已被编译为字节码文件,JSP引擎直接执行字节码文件实现Tag文件的动态处理

③再次调用,发生改变,则同①

补充:Tag文件在 “<%!” 和“ /%>”标记符号之间声明的变量,和JSP在 “<%!” 和“ /%>”之间声明的变量类似,其有效范围是整个Tag文件

但有一点不同:每当Tag文件对应的字节码被执行完毕后,这些变量即可释放所占有的内存空间

4)Tag标记的标记体

一个Tag文件对应一个Tag标记,并让JSP页面使用这个Tag标记动态执行该Tag文件。Tag标记的格式: <Tag文件名字/>

<Tag文件名字>

标记体

</Tag文件名字>

动态地向Tag文件传递信息

相应地,Tag文件通过调用<jsp:doBody/>处理JSP页面传递过来的“标记体”

标记体的形式:文本数据

4 Tag文件中的常用指令

与JSP文件类似,Tag文件中也有一些常用指令,这些指令将影响Tag文件的行为。

Tag文件中经常使用的指令有:tag、taglib、include、attribute、variable。

(1) tag指令

Tag文件中的tag指令类似于JSP文件中的page指令。

Tag指令从总体上影响标记文件的处理和表示

<%@ tag 属性1= “value1” 属性2= “value2” …属性n= “valueN” >

一个Tag文件中可以使用多个tag指令

<%@tag 属性 1= “value 1”>

<%@ tag 属性 2= “value 2” >

<%@ tag 属性 n= “value n” >

Tag指令可以操作的属性有:body-content、language、import、pageEncoding。

body-content 属性

指定JSP页面使用Tag标记时可以使用的标记体格式

empty——没有标记体

tagdependent——有或无标记体,纯文本处理

scriptless——有或无标记体,标记体中不能有Java程序片

Tag文件通过<jsp: dobody>获取JSP页面传递的“标记体”

language 属性

指定Tag文件使用的脚本语言,目前只能使用Java,其默认值就是java

import 属性

为Tag文件引入Java核心包中的类

pageEncoding属性

指定Tag文件的字符编码,其默认值是ISO-8859-1。Tag文件必须使用ANSI编码保存

(2)include指令

使用方法和作用与JSP文件中类似。

(3) attribute指令

向Tag文件传值。

Tag文件充当着可复用代码的角色,如果一个Tag文件能允许使用它的JSP页面向该Tag文件传递字符串数据,就使得Tag文件的功能更为强大。

在Tag文件中通过使用attribute指令,可以动态地向该Tag文件传递需要的字符串数据。attribute指令的格式如下:

<%@ attribute name=“对象名字”

required=“true”|“false“ type=“对象的类型”%>

<%@ attribute name=“对象名字”

required=“true”|“false“ type=“对象的类型”%>

•name:JSP页面在调用Tag文件时,可向name属性指定的对象传递一个引用

•type:对象的类型,必须带有包名。如果未指定,则对象的类型为java.lang.String类型

•requried:可选,默认为false。指定为true时,必须传递引用,false时可传可不传

•JSP页面使用Tag标记向所调用的Tag文件中name属性指定的对象传递一个引用。方式如下

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

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

标记体

</前缀:Tag文件名字>

(3) attribute指令

举例一

•MyTag.tag

<%@ attribute name=“length” required=“true ” %>

•JSP页面:

<computer:MyTag length=“1000”/>

举例二

•YourTag.tag

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

•JSP页面:

<computer:YourTag result=“<%= new Double(66.99)%>”/>

在Tag文件中,不可以在定义和attribute指令中的name属性指定的对象具有相同名字的变量,否则将隐藏attribute指令中的对象,使其失效。

(4) variable指令

Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。

(1)variable指令的格式

” variab<%@ variable name-given=“对象名字le-class=“对象的类型” scope=“有效范围”%>

例: <%@ variable name-given="time" variable-class="java.util.Date" scope="AT_END" %>

该variable指令给出的对象的名字是time、类型为java.util.Date、有效范围是AT_END。

(2)对象的返回

•jspContext调用setAttribute(“对象的名字”,对象的引用)方法存储对象的名字以及该对象的引用。比如:jspContext.setAttribute("time",new Date());将名字是time的Date对象存储到jspContext中。

以下的variable指令:<%@ variable name-given=“time” variable-class=“java.util.Date” scope=“AT_END” %>为JSP页面返回名字是time的Date对象。

(5) taglib指令

一个Tag文件可以使用Tag标记来调用其它的Tag文件。

Tag文件必须使用<taglib>指令引入该Web服务目录下的标记库,才可以使用Tag标记来调用相应的Tag文件。<taglib>指令的格式如下:

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

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

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

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

5  Tag标记的嵌套

当我们使用Tag标记时,可以带有标记体,标记体还可以是一个Tag标记,这就实现了Tag标记的嵌套。

• Tag标记中的标记体由Tag文件的<jsp:doBody/>标记负责处理,而在Tag文件中,<jsp:doBody />标记被替换成对“标记体”进行处理后所得到的结果。

 

转载于:https://my.oschina.net/u/242764/blog/324887

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值