目录
JSP的Tag文件与Tag标记是JSP技术中非常重要的一部分。Tag文件是JSP页面中一组自定义标签的集合,而Tag标记则是用于定义自定义标签的语法。学习这两个概念可以帮助我们更好地理解JSP技术的使用和开发。
在学习Tag文件时,我们需要了解它的基本结构和使用方法。Tag文件通常包含两个部分:Tag处理器和Tag标记。Tag处理器是处理自定义标签的Java类,而Tag标记则是定义自定义标签的XML文件。在使用Tag文件时,我们需要在JSP页面中引入Tag文件,并使用自定义标签来调用Tag处理器中的方法。
而在学习Tag标记时,我们需要了解它的语法和使用方法。Tag标记通常包含标签名称、属性、标签体和标签体处理器等部分。使用Tag标记时,我们需要按照规定的语法来定义自定义标签,并在JSP页面中使用自定义标签来调用Tag标记中定义的处理器。
总之,学习JSP的Tag文件与Tag标记是非常重要的,它可以帮助我们更好地理解JSP技术的使用和开发。我们需要了解Tag文件和Tag标记的基本结构和语法,以便在实际开发中更好地应用它们。
Tag文件的结构
Tag文件和JSP文件很类似,可以被JSP页面动态加载调用,实现代码的复用(但用户不能通过该Tag文件所在Web服务目录直接访问Tag文件)
Tag文件是扩展名为.tag的文本文件,其结构和JSP文件类似。一个Tag文件中可以有普通的HTML标记符、某些特殊的指令标记、成员变量声明和方法的定义、Java程序片和Java表达式。oddNumberSum.tag是一个简单Tag文件,负责计算100内的全部奇数的代数和。
Tag文件的保存
建立目录结构:Web服务目录\WEB-INF\tags
比如:ch3\WEB-INF\tags
其中的WEB-INF(字母大写)和tags都是固定的目录名称,而tags下的子目录的名称可由用户给定。
一个Tag文件必须保存到tags目录或其下的子目录中。这里把oddNumberSum.tag保存到
ch3\WEB-INF\tags
目录中。
Tag标记的使用
引入标记库后,JSP页面就可以使用带前缀的Tag标记调用相应的Tag文件,其中的前缀由<taglib>指令中的prefix属性指定。例如JSP如下使用Tag标记调用相应的Tag文件:
<computer:oddNumberSum />
<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ taglib tagdir = "/WEB-INF/tags" prefix = "computer"%>
<HTML><body bgcolor = cyan>
<h1>调用Tag文件计算100内奇数和:</h1>
<computer:oddNumberSum /> <%-- 使用Tag标记 --%>
</body></HTML>
tag指令
类似于JSP文件中的page指令。Tag文件通过使用tag指令可以指定某些属性的值,<%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>
在一个Tag文件中可以使用多个tag指令,因此我们经常使用多个tag指令为属性指定需要的值:
<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性值"%>
……
<%@ tag 属性n="属性值"%>
attribute指令
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ taglib tagdir="/WEB-INF/tags/example2" prefix="getTriangleArea"%>
<HTML><body bgcolor = yellow >
<p style="font-family:宋体;font-size:36;color:blue">
<%-- 使用Tag标记: --%>
<getTriangleArea:triangle sideA="15" sideB="16" sideC="20"/>
</p>
</body></HTML>
结果:
代码:
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ page import="java.util.LinkedList" %>
<%@ page import="java.util.Random" %>
<%@ taglib tagdir="/WEB-INF/tags/example3" prefix="sortNumber"%>
<HTML><body bgcolor = #CCCCCC>
<% LinkedList<Double> listNumber=new LinkedList<Double>();
Random random = new Random();
for(int i =0;i<3;i++) {
double d = random.nextDouble(); //[0,1)之间的随机数
listNumber.add(d);
}
%>
<p style="font-family:宋体;font-size:36;color:blue">
排序数据
<sortNumber:sort list="<%= listNumber %>"/> <%-- 使用Tag标记 --%>
</body></HTML>
代码:
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ taglib tagdir="/WEB-INF/tags/example4" prefix="getPrice" %>
<HTML><body bgcolor = #FFCCFF>
<% String str = "麻辣豆腐:20.6元,红烧肉:68.9元,烤鸭:199元";
%>
<getPrice:handleData mess="<%= str %>"/> <%-- 使用Tag标记 --%>
<p style="font-family:宋体;font-size:36">
菜单:<br>"<%= str %>"<br>价格总和:
<%= price %> <%-- 使用Tag标记返回的Double对象price --%>
</p>
<% str = "毛巾:2.6元,香皂:6.9元,牙刷:12.3元";
%>
<getPrice:handleData mess="<%= str %>"/>
<p style="font-family:黑体;font-size:36;color:blue">
购物小票:<br>"<%= str %>"<br>价格总和:
<%= price %>
</p>
</body></HTML>
结果: