java tag文件,JSP中Tag文件与Tag标记

引入原因

多个JSP页面的共用信息可以放在一个单独JSP文件中,然后用Include指令或动作载入,实现代码复用。缺点是用户可以直接访问这些JSP文件(我们可能不希望用户访问),且include载入的文件可以放在任意目录中,目录显得杂乱不利维护。

解决方法:引入Tag文件。它是一种特殊的文本文件,扩展名为.tag,和JSP文件很类似,可以被JSP页面动态加载调用,但是用户不能通过该Tag文件所在Web服务目录直接访问这个Tag文件。

优点:将数据处理的代码放在Tag文件中,JSP页面只负责显示,实现数据处理和显示分离。

Tag文件使用

首先在project的web-inf目录下创建tags子目录,所有tag文件必须保存在该目录下。然后右键tags文件夹—-new—-other—-web—-JSP tag创建tag文件。

75462273_1

tag文件使用示例:

Show.tag

body>P>int size=1; for(int i=1;i<=3;i++){ size=size+1;%> jsp:doBody />P>body>1

2

3

4

5

6

7

8

examlpe3-2.jsp

'text/html; charset=gb2312' %>'look' tagdir='/WEB-INF/tags' %>HTML>调用标记 --%> look:Show> 我是一只小鸭子 look:Show> look:Show> 咿呀咿呀哟 look:Show> HTML>1

2

3

4

5

6

7

8

9

10

11

12

75462273_2

说明:Tag文件名Show对应着一个标记;Tags目录下所有文件集合称自定义标记库或标记库。

工作原理:JSP 引擎把Tag文件转换成Java文件,并编译成class文件供JSP程序动态调用。标记体传给Tag文件, Tag文件使用接受标记体信息。

Tag文件中的常用指令

Tag指令

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

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

……

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

Tag指令:body-content属性

属性值有:empty、tagdependent、scriptless,默认值是scriptless。

Empty:JSP页面必须使用没有标记体的Tag标记

Tag指令:language属性

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

Tag指令:import属性

为Tag文件引入Java核心包中的类。import属性可以取多个值。

import属性已经有如下值:

“java.lang.*”

“javax.servlet.*”

“javax.servlet.jsp.*”

“javax.servlet.http.*”

Tag指令:pageEncoding属性

指定Tag文件的字符编码,其默认值是ISO-8859-1。

include指令

使用方法和作用与JSP文件中的include指令标记类似。

include指令标记的作用是在Tag文件中出现该指令的位置处,静态插入一个文件。其语法格式如下:

attribute指令

在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据,增强Tag文件功能。指令的格式如下:

name属性是必需的,JSP页面向它传递一个引用。比如,一个Tag文件MyTag.tag中有如下attribute指令:

那么JSP页面就可以如下使用Tag标记(假设标记的前缀为computer)调用MyTag.tag:

我向Tag文件中传递的值是1000

required属性可选。缺省值是false。若设为true,则JSP页面必须向Tag文件的attribute属性传递一个引用,否则出错。

type属性指定对象的类型。如type=“Java.util.Date”,如果缺省,则类型是java.lang.String。

variable指令

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

variable指令的格式:

例:

name-given属性是必需的。

variable-class可以是java.lang.String(缺省值)等类型。

scope属性表示在JSP页面中何时何地可以使用返回的对象。各属性值如下:

AT_BEGIN: 一旦开始使用Tag标记,就可以在任何地方用对象;

NESTED:只可以在标记体中使用对象;

AT_END:只可以在标记结束后才可以使用对象;

对象的返回

以下的variable指令:

为JSP页面返回名字是time的Date对象

Tag文件只有将对象信息存储到jspContext中,JSP页面才可以使用该对象。jspContext调用setAttribute(“对象的名字”,对象的引用)方法存储对象的名字以及该对象的引用。比如:jspContext.setAttribute(“time”,new Date());将名字是time的Date对象存储到jspContext中。

代码示例:

GiveDate.tag

@ tag import='java.util.*' %>@ variable name-given='time' variable-class='java.util.Date' scope='AT_END' %> jspContext.setAttribute('time',new Date()); %>@ tag language='java' pageEncoding='US-ASCII'%>1

2

3

4

5

6

lookTime.jsp

'text/html;charset=gb2312' %>'java.text.*' %>'/WEB-INF/tags' prefix='showTime'%>HTML>BODY> showTime:GiveDate />

当前时间: %--使用返回的time对象 --%>/BODY>HTML>1

2

3

4

5

6

7

8

75462273_3

taglib指令

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值