这次讲的是jsp2.0的特性之一,我们可以编写标签文件,指没有标签处理器和标签类库描述符的定制动作指令,不编译,无标签类描述符。
本文结构:
tag文件只是以tag为后缀名的文本文件。除了jsp页面指令外,其他jsp元素都可以出现在tag文件中页面引用格式。一,不需要编译,只要jsp语法即可,这意味不懂java的人也可以编写。二,不许需要面搜标签库描述符。
格式:
tagdir:用于指定tag文件目录,当页面使用<ui:xxxx>进,会查找该目录下对应的xxxx.tag文件。
prefix:指定使用时标签前缀
使用:
包结构图和效果图(将服务器当前时间显示):

感兴趣不?往下看吧
firsttag.tag:
firsttagtest.jsp
taglib、include、attribute、variable。
1)
#tag 指令如同jsp网页的page指令,用来设定标签文件。
#display-name表示图形化开发工具显示<display-name>所指定 的名称;
#body-content表示可能的值有三种,分别是empty、scriptless、tagdependent、empty。
empty为标 签中没有主体内容,
scriptlet为标签中的主体内容el、jsp动作元素,但不可以为jsp脚本元素,
tagdependent表示标签中的主体内 容交由tag自己去处理,默认值为scriptless;
#dynamic-attributes表示设定标签文件动态属性的名称,当dynamic- attributes设定时,将会产生一个map类型的集合对象,用来存放属性的名称和值;
#small_icon表示在图形化开发工具显 示<small-icon>所指定的tld相对路径的小图标,大小为16x16;
#large-icon表示在图形化开发工具显 示<large-icon>所指定的tld相对路径的大图标,大小为32x32;
#description表示用来说明此标签文件的相关信 息;
#example表示用来增加更多的标签使用说明,包括标签应用时的范例;
#language、import、pageencoding、 iselignored这些属性与page指令相对应的属性相同。
2)
这 个指令用来设定自定义标签的属性。其中name表示属性的名字;
required表示是否为必要,默认为false;
rtexprvalue表示属性值是 否可以为run-time表达式。如为true,表示属性可用动态的方式来指定,如:<mytag:read num="${param.num}"/>,如为false,则一定要用静态的方式来指定属性值;
type表示这个属性的类型,默认值为 java.lang.string;description用来说明此属性的相关信息
3)
这 个指令用来设定标签文件的变量。其中name-given表示直接指定变量的名称;
name-from-attribute表示以自定义标签的某个属性值 为变量名称;
alias表示声明一个局部范围属性,用来接收变量的值;variable-class表示变量的类名称,默认值为 java.lang.string;
declare表示此变量是否声明默认值为true;scope表示此变量的范围,范围是:at_begin、 at_end和nested,默认值为nested;description用来说明此变量的相关信息
········variable案例引出 dobody
jar结构 和 效果图
dobodydemo.tag
dobodytest.jsp
<jsp:dobody>与<jsp:invoke>动作元素,前者是用来处理卷标本体文字,后者则是用来设 定标签间的fragment,下面两个动作元素搭配着attribute与variable两个指令元素。
首先介绍<jsp:dobody>您可以用它来决定是否显示本体文字,例如撰写如下的tag file:
check.tag
必须先说明的是,这边使用了scriptlet,这并不是一个良好的示范,若能搭配jstl或自订标签库来完成tag file的撰写会是比较好的,这边纯綷是为了说明方便才使用了scriptlet。
上面这个tag
file会检查传入的属性password是否符合我们设定的密码,如果符合就执行<jsp:dobody>,表示显示卷标之间的本体文字,
否则显示密码不正确的讯息,attribute指令元素可以指定自订卷标所使用的属性文字,可以使用下面的jsp网页来测试:
test.jsp
您可以发现,tag file即使是用来当作自订标签库的简便方式,也是十分的方便,不需要在tld档中作额外的设定,也可以得到相关的功能。
attribute除了指定属性文字之外,也可以将属性当作fragment传入,方便在tag file中作个别的处理,例如下面撰写一个table.tag:
table.tag
在这个tag file中,将attribute的属性设定为fragment,然后想取得指定的fragment的话,就可以使用<jsp: invoke>动作元素,并指定fragment的名称,使用下面这个jsp网页来测试:
在jsp网页中,同样的是使用<jsp:attribute>来说定fragment的文字内容,执行这个jsp网页,会传回以下的内容:
在tag file与jsp网页之间,可以使用variable指令元素设定scripting variable,以在两者之间传递变量内容,例如撰写以下的tag file:
precode.tag
在这个tag file中,使用variable设定scripting
variable为"code",作用范围为"nested",也就是在起始卷标与结束卷标之间,而其中<jsp:dobody>中多了一项
属性var,表示在jsp网页中的<jsp:body>卷标中的文字内容将设定给"code"变量,可以用下面这个jsp网页来测试:
<jsp:body>之间的虚拟程序代码将会传入给"code"变量,由于它是scripting
variable,可以在标签之内起作用,所以在<jsp:attribute>中的el式${code}可以取得tag
file中"code"的内容,也就是<jsp:body>传入的文字,之后我们将<jsp:attribute>的内容当作
fragment在tag file中作处理,结果将会如以下的网页: