目录
3.1Tag文件
Tag文件的结构
Tag文件的保存
3.2Tag标记
Tag标记与Tag文件
Tag标记的使用
Tag标记的运行原理
3.3Tag文件中的常用指令
tag指令
include指令
attribute指令
variable指令
taglib指令
3.1Tag文件
3.1.1Tag文件的结构
Tag文件是扩展名为.tag的文本文件,其结构和JSP文件相似。
<% @ tag pageEncoding="utf-8"%>
3.1.2Tag文件的保存
Tag文件可以实现代码的复用,即Tag文件可以被许多JSP页面使用。
web服务目录\WEB-INF\tags
3.2Tag标记
3.2.1Tag标记与Tag文件
某个web服务目录下的Tag文件只能由该web服务目录中的JSP页面调用,JSP页面必须通过Tag标记来调用一个Tag文件。
<Tag文件的名字/>
3.2.2Tag标记的使用
一个JSP页面通过使用Tag标记来调用一个Tag文件。Web服务目录下的一个JSP页面在使用Tag标记来调用一个Tag文件之前,必须首先使用taglib,指令标记引人该Web服务目录下的标记库,只有这样,JSP页面才可以使用Tag标记调用相应的Tag文件
taglib指令的格式如下:
<% @ taglib tagdir= "标记库的位置"prefix="前缀">
<%@ 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>
3.2.3 Tag文件的运行原理
Tomcat 服务器处理JSP 页面中的Tag标记的原理如下:
*如果该Tag标记对应的Tag文件是首次被JSP 页面调用,那么 Tomcat服务器会将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件(这和执行JSP页面的原理类似)。
*如果该 Tag文件已经被转编译为字节码文件,Tomcat 服务器将直接执行这个字节码文件。
*如果对Tag文件进行了修改,那么Tomcat服务器会重新将Tag文件转译成一个Java 文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件。
3.3Tag文件中的常用指令
3.3.1tag指令
Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理与表示。
<% @ tag属性1=“属性值”属性2=“属性值”....属性n=“属性值” %>
3.3.2include指令
<jsp:include page="文件的URL"/>
3.3.3attribute指令
Tag文件充当着可复用代码的角色,如果一个Tag文件允许使用它的JSP页面向该Tag 文件传递数据,就使得Tag文件的功能更为强大。在Tag文件中通过使用attribute 指令让使用它的JSP页面向该Tag文件传递需要的数据。 attribute 指令的格式如下:
<% @ attribute name ="对象名字"required="ture"|"false"type="对象的类型"%>
<%@ 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>
sort.tag
<%@ attribute name="list" required="true" type="java.util.LinkedList" %>
<%@ tag import="java.util.Collections" %>
<%@ tag import="java.util.Iterator" %>
<%
Collections.sort(list); //排序链表
Iterator<Double> ite = list.iterator(); //得到迭代器
while(ite.hasNext()) { //遍历链表
out.print("<br>"+ite.next());
}
%>
3.3.4variable指令
Tag文件通过使用attribute 指令,可以使得调用该Tag文件的JSP页面动态地向其传递数据。在某些Web 应用中,JSP 页面不仅希望向Tag文件传递数据,而且希望Tag文件能运回数据给JSP 页面。比如,许多JSP 页面可能都需要调用某个 Tag文件对某些数据进行基本的处理,但不希望Tag文件做进一步的特殊处理以及显示数据,因为各个JSP页面对数据的进一步处理或显示格式的要求是不同的。因此,JSP 页面希望Tag文件将数据的基本处理结果存放在某些对象中,将这些对象返回给当前JSP页面即可。
Tag 文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。
variable指令格式如下:
<% @ variable name -give="对象名"variable-class="对象类型"scope="有效范围"%>
<%@ 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>
handleDate.tag
<%@ attribute name="mess" required="true" type="java.lang.String" %>
<%@ tag import="java.util.regex.Pattern" %>
<%@ tag import="java.util.regex.Matcher" %>
<%@ variable name-given="price" variable-class="java.lang.Double"
scope="AT_BEGIN" %>
<%!
public Double getPriceSum(String input){ // 定义方法
Pattern pattern; //模式对象
Matcher matcher; //匹配对象
String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配数字,整数或浮点数的正则表达式
pattern = Pattern.compile(regex); //初试化模式对象
matcher = pattern.matcher(input); //初始化匹配对象,用于检索input
double sum = 0;
while(matcher.find()) {
String str = matcher.group();
sum += Double.parseDouble(str);
}
return new Double(sum);
}
%>
<% //将返回的Double对象放在jspContext中:
jspContext.setAttribute("price",getPriceSum(mess));
%>
运行结果:
3.3.5 taglib指令
taglib指令格式如下:
<% @ taglib tagdir ="自定义标记库的位置"prefix="前缀">
总结
以上就是今天要讲的内容,本文仅仅简单介绍了JSP页面的结构、Java程序片以及表达式,其中最重要的还是后面的指令标记和动作标记。