第3章 Tag文件与Tag标记(第2版)_第1页
第3章 Tag文件与Tag标记(第2版)_第2页
第3章 Tag文件与Tag标记(第2版)_第3页
第3章 Tag文件与Tag标记(第2版)_第4页
第3章 Tag文件与Tag标记(第2版)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

<JSP程序设计>(第2版)第3章

配合<JSP程序设计(第2版)代码>一起使用Powerpoint制作:耿祥义张跃平普通高等教育“十一五”国家级规划教材Tag文件与Tag标记主要内容Tag文件的结构Tag文件的存储目录Tag标记Tag文件中的常用指令Tag标记的嵌套难点掌握Tag文件中的attribute指令掌握Tag文件中的variable指令关键实践使用标记体使用attribute指令和variable指令第3章导读2§3.1Tag文件的结构

Tag文件是一种特殊的文本文件。Tag文件和JSP文件很类似,可以被JSP页面动态加载调用,但是用户不能通过该Tag文件所在Web服务目录直接访问这个Tag文件。Tag文件是扩展名为.tag的文本文件,其结构几乎和JSP文件相同。一个Tag文件中可以有普通的HTML标记符、某些特殊的指令标记(见3.3)、成员变量和方法的声明、Java程序片和Java表达式。

参考AddSum.tag,EvenSum.tag3AddSum.tag,EvenSum.tagOddSum.tag<P>这是一个Tab文件,负责计算1~100内的奇数之和:<%intsum=0,i=1;for(i=1;i<=100;i++){if(i%2==1)sum=sum+i;}out.println(sum);%>EvenSum.tag<P>这是一个Tab文件,负责计算1~100内的偶数之和:<%intsum=0,i=1;for(i=1;i<=100;i++){if(i%2==0)sum=sum+i;}out.println(sum);%>4§3.2Tag文件的存储目录

如果某个Web服务目录下的JSP页面准备调用一个Tag文件,那么我们必须在该Web服务目录下,建立如下的目录结构:

Web服务目录\WEB-INF\tags

比如:

ch3\WEB-INF\tags其中的WEB-INF和tags都是固定的目录名称,而tags下的子目录的名称可由用户给定。5§3.3Tag标记3.3.1Tag标记与Tag文件当我们编写了一个Tag文件并保存到特定目录中后,也就自定义出了一个标记,该标记的格式为:

<Tag文件名字/>或

<Tag文件名字>标记体</Tag文件名字>

一个Tag文件对应着一个标记,该标记被习惯地称为Tag标记,将存放在同一目录中的若干个Tag文件所对应的Tag标记的全体称之为一个自定义标记库或简称为标记库。63.3.2Tag标记的使用

一个JSP页面通过使用Tag标记来调用一个Tag文件。分为两步:

1.使用<taglib>指令标记引入该Web服务目录下的标记库。<taglib>指令的格式如下:

<%@taglibtagdir="自定义标记库的位置"prefix="前缀">一个JSP页面可以使用几个<taglib>指令标记引入若干个标记库,例如:

<%@taglibtagdir="/WEB-INF/tags"prefix="beijing"%><%@taglibtagdir="/WEB-INF/tags/geng"prefix="dalian"%>

2.JSP页面使用带前缀的Tag标记调用相应的Tag文件,其中的前缀由<taglib>指令中的prefix属性指定。例如:

<beijing:OddSum/><dalian:EvenSum/>例3-17例1

例子1中的JSP页面保存在Web服务目录ch3中,该JSP页面所调用的Tag文件是3.1节中提到的OddSum.tag和EvenSum.tag。example3_1.jsp的效果如图3.1。

<%@pagecontentType="text/html;Charset=GB2312"%><%@taglibtagdir="/WEB-INF/tags"prefix="beijing"%><%@taglibtagdir="/WEB-INF/tags/geng"prefix="dalian"%><html><bodybgcolor=cyan><h3>以下是调用Tag文件的效果:</h3><beijing:OddSum/><h3>以下是调用Tag文件的效果:</h3><dalian:EvenSum/></body></html>83.3.3Tag标记的标记体标记的格式为:

<Tag文件名字/>或

<Tag文件名字>标记体</Tag文件名字>当JSP页面调用一个Tag文件时可能希望动态地向该Tag文件传递信息,那么就可以使用带有标记体的Tag标记来执行一个Tag文件,Tag标记中的“标记体”就会传递给相应的Tag文件,这个Tag文件通过使用

<jsp:doBody/>标记处理JSP页面传递过来的“标记体”。详细讨论见3.4节。例3-29例2

例子2中,example3_2.jsp页面调用Show.tag文件,而且通过标记体向Show.tag文件传递文本数据。Show.tag文件使用<jsp:doBody/>处理example3_2.jsp页面传递过来的文本数据,将该文本数据循环显示3次并逐次增大文本字体的字号。Show.tag保存在ch3\WEB-INF\tags目录中,example3_2.jsp的效果如图3.2。

10§3.4Tag文件中的常用指令

3.4.1Tag指令

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

<%@tag属性1="属性值"属性2="属性值"…属性n="属性值"%>在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:

<%@tag属性1="属性值"%><%@tag属性2="属性值"%>……<%@tag属性n="属性值"%>tag指令可以操作的属性有:body-content、language、import、pageEncoding。113.4.1Tag指令_body-content属性

body-content属性的值可以确定JSP页面使用Tag标记时是否可以有标记体,如果允许有标记体,该属性会给出标记体内容的类型。body-content属性值有:empty、tagdependent、scriptless,默认值是scriptless。

属性的值是empty,JSP页面必须使用没有标记体的Tag标记:<Tag文件名字/>来调用相应的Tag文件。

属性的值是tagdependent或scriptless,JSP页面使用无标记体或有标记体的Tag标记:<Tag文件名字>标记体</Tag文件名字>来调用相应的Tag文件。

注:属性值是scriptless,那么标记体中不能有Java程序片;属性值是tagdependent,那么Tag文件将标记体的内容按纯文本处理。

123.4.1Tag指令_language属性

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

import属性的作用是为Tag文件引入Java核心包中的类,这样就可以在Tag文件的程序片部分、变量及方法声明部分、表达式部分使用Java核心包中的类。import属性可以取多个值。

import属性已经有如下值:

"java.lang.*"、"javax.servlet.*"、"javax.servlet.jsp.*"、"javax.servlet.http.*"。

143.4.1Tag指令_pageEncoding属性该属性指定Tag文件的字符编码,其默认值是ISO-8859-1。153.4.2include指令

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

<%@includefile="文件的URL"%>

163.4.3attribute指令

在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据。attribute指令的格式如下:<%@attributename="对象名字"required="true"|"false"type="对象的类型"%>注:attribute指令中的name属性是必需的。比如,一个Tag文件MyTag.tag中有如下的attribute指令:

<%@attributename="length"required="true"%>那么JSP页面就可以如下使用Tag标记(假设标记的前缀为computer)调用MyTag.tag:

<computer:MyTaglength="1000"/>或

<computer:MyTaglength="1000">我向Tag文件中传递的值是1000<computer:MyTag/>例3-3,3-417例3

例子3中,Triangle.tag存放在ch3\WEB-INF\tags目录中,该Tag文件负责计算、显示三角形的面积。example3_3.jsp使用Tag标记调用Triangle.tag文件,并且向Triangle.tag文件传递三角形三边的长度。example3_3.jsp的效果如图3.3。

18例4

例子4中,JSP页面只负责将学生的姓名和成绩分别存放到链表(java.util.LinkedLst类型对象)中,然后将链表传递给Sort.tag,Sort.tag负责按从低到高显示学生的成绩。example3_4.jsp的效果如图3.4。

193.4.4variable指令

Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。(1)variable指令的格式<%@variablename-given=“对象名字”variable-class=“对象的类型”scope=“有效范围”%>

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

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

(2)对象的返回jspContext调用setAttribute(“对象的名字”,对象的引用)方法存储对象的名字以及该对象的引用。比如:jspContext.setAttribute("time",newDate());将名字是time的Date对象存储到jspContext中。以下的variable指令:<%@variablename-given="time"variable-class="java.util.Date"scope="AT_END"%>为JSP页面返回名字是time的Date对象。例3-520例5

例子5中,Tag文件GiveRoot.tag负责求出一元二次方程的根。JSP页面在调用Tag文件时,使用attribute指令将方程的系数传递给Tag文件;Tag文件GiveRoot.tag使用variable指令返回一元二次方程的根给调用该Tag文件的JSP页面。例子5中的useOne.jsp和useTwo.jsp都使用Tag标记调用GiveRoot.tag,二者都可以得到GiveRoot.tag返回的方程的两个根,但是二者使用不同的方式来处理和显示方程的两个根。userOne.jsp将方程的根保留最多3位小数,并计算方程的两个根之和,userTwo.jsp将方程的根保留最多5位小数,并计算方程的两个根之积。userOne.jsp和userTwo.jsp的效果分别如图3.5(1)和3.5(2)

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

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

<%@taglibtagdir="自定义标记库的位置"prefix="前缀">一个Tag文件也可以使用几个<taglib>指令标记引入若干个标记库,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论