引入原因多个JSP页面的共用信息可以放在一个单独JSP文件中,然后用Include指令或动作载入,实现代码复用。缺点是用户可以直接访问这些JSP文件(我们可能不希望用户访问),且include载入的文件可以放在任意目录中,目录显得杂乱不利维护。 Tag文件使用首先在project的web-inf目录下创建tags子目录,所有tag文件必须保存在该目录下。然后右键tags文件夹—-new—-other—-web—-JSP tag创建tag文件。 tag文件使用示例: Show.tag body>P><% int size=1; for(int i=1;i<=3;i++){ size=size+1;%> jsp:doBody /><%}%>P>body>
examlpe3-2.jsp <%@page contentType='text/html; charset=gb2312' %><%-- 先使用taglib指令引入标记库 --%><%@taglib prefix='look' tagdir='/WEB-INF/tags' %>HTML><%-- 使用<标记前缀:定义好的标记名>调用标记 --%> look:Show> 我是一只小鸭子 <%-- 标记体 --%> look:Show> look:Show> 咿呀咿呀哟 look:Show> HTML>
说明:Tag文件名Show对应着一个标记;Tags目录下所有文件集合称自定义标记库或标记库。 Tag文件中的常用指令Tag指令Tag文件中的tag指令类似于JSP文件中的page指令。Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理和表示。tag指令的语法如下: <%@ tag 属性1='属性值' 属性2='属性值' …属性n='属性值'%> 在一个Tag文件中可以使用多个tag指令: <%@ tag 属性1='属性值'%><%@ tag 属性2='属性值'%>……<%@ tag 属性n='属性值'%> tag指令可以操作的属性有:body-content、language、import、pageEncoding。 Tag指令:body-content属性属性值有:empty、tagdependent、scriptless,默认值是scriptless。 Tag指令:language属性指定Tag文件使用的脚本语言,目前只能取值java,其默认值就是java。 Tag指令:import属性为Tag文件引入Java核心包中的类。import属性可以取多个值。 Tag指令:pageEncoding属性指定Tag文件的字符编码,其默认值是ISO-8859-1。 include指令使用方法和作用与JSP文件中的include指令标记类似。 <%@ include file= '文件的URL' %> attribute指令在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据,增强Tag文件功能。指令的格式如下: <%@ attribute name='对象名字' required='true'|'false' type='对象的类型'%>
<%@ attribute name='length' required='true' %> 那么JSP页面就可以如下使用Tag标记(假设标记的前缀为computer)调用MyTag.tag: 或
variable指令Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。 variable指令的格式:<%@ variable name-given=“对象名字” variable-class=“对象的类型” scope=“有效范围”%> 例: <%@ variable name-given='time' variable-class='java.util.Date' scope='AT_END' %>
对象的返回以下的variable指令: <%@ variable name-given='time' variable-class='java.util.Date' scope='AT_END' %> 为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'%>
lookTime.jsp <%@ page contentType='text/html;charset=gb2312' %><%@ page import ='java.text.*' %><%@ taglib tagdir='/WEB-INF/tags' prefix='showTime'%>HTML>BODY> showTime:GiveDate />
taglib指令一个Tag文件可以使用Tag标记来调用其它的Tag文件。Tag文件也必须使用指令引入该Web服务目录下的标记库,才可以使用Tag标记来调用相应的Tag文件。指令的格式如下: <%@ taglib tagdir='自定义标记库的位置' prefix='前缀'> 一个Tag文件也可以使用几个指令标记引入若干个标记库,例如: <%@ taglib tagdir='/WEB-INF/tags' prefix='beijing'%><%@ taglib tagdir='/WEB-INF/tags/tagsTwo' prefix='dalian'%> 。 |
|