目录
1.Tag文件
Tag文件是以扩展名为.tag的文本文件,结构与JSP文件类似。Tag文件中可以包含以下几个部分:
- HTML标记
- Tag指令标记
- 成员变量声明和方法的定义
- Java表达式
- Java程序片
Tag文件须放在Web服务目录\WEB-INF\tags,在保存Tag文件时,注意使用utf-8的编码方式。
2.Tag标记
当Tag文件保存到对应目录时,就给出了Tag标记,Tag标记的名字和Tag文件的名字一致,JSP页面在使用Tag文件之前,须首先用taglib指令标记引入该Web服务目录下的标记库,taglib指令格式如下:
<%@taglib tagdir="标记库的位置" prefix="前缀">
例如
<%@taglib tagdir="/WEB-INF/tags" prefix="computer"%>
引入标记库后就可以使用带pregix指定的前缀的Tag标记调用相应的Tag文件,例如:
<computer:oddNumberSum/>
1.3Tag文件中常用的指令
Tag指令:此指令类似与JSP文件中的page指令。Tag文件通过此指令可以指定某些属性的值,其格式如下:
<%@tag的属性1="属性值"%>
<%@tag的属性2="属性值"%>
.....
<%@tag的属性n="属性值"%>
常用的有以下属性:
- language属性:指定Tag文件使用的脚本语言,目前只能取值Java
- import属性:为Tag文件引入包中的类
- pageEncoding属性:指定Tag文件的字符编码,如不指定,默认为ISO-8859-1
include指令:与JSP文件中的的include指令作用相同
attribute指令:通过此指令让JSP页面向使用的Tag文件传递需要的数据,格式如下
<%@attribute name="对象名字" required="ture"|"false" type = "对象的类型"%>
例如
<%@attribute name="result" required="ture" type = "java.lang.Double"%>
variable指令:将Tag文件中的对象返回给调用该Tag文件的JSP页面,其格式如下:
<%@variable name - given="对象名"variable-class="对象类型"scope="有效范围"%>
scope的值可以取:AT_BEGIN、NESTED和AT_END
1.4运行案例
解析单词
giveText.jsp
<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "utf-8" %>
<%@ page import="java.util.Iterator" %>
<%@ taglib tagdir = "/WEB-INF/tags/prictice1" prefix = "getWords"%>
<HTML><body bgcolor = #CCCCFF>
<% String str = "How are you,are you student? where are you from? ";
%>
<getWords:backWords okString ="<%= str %>" /> <%-- 使用Tag标记 --%>
<p style="font-family:宋体;font-size:26">
<%= str %><br>
<%
Iterator<String> ite = words.iterator(); //使用Tag标记返回的Double对象words
out.print("使用了"+ words.size()+"个单词:<br>");
while(ite.hasNext()) { //遍历集合
out.print(" "+ite.next());
}
%>
</p></body></HTML>
backWords.tag
<%@ tag import="java.util.HashSet" %>
<%@ tag import="java.util.regex.Pattern" %>
<%@ tag import="java.util.regex.Matcher" %>
<%@ attribute name="okString" required="true" type="java.lang.String" %>
<%@ variable name-given="words" variable-class="java.util.HashSet "
scope="AT_BEGIN" %>
<%
HashSet<String> set = new HashSet<String>(); //集合不允许有相同的元素
Pattern pattern; //模式对象
Matcher matcher; //匹配对象
String regex="[a-zA-Z]+" ;//匹配英文单词
pattern = Pattern.compile(regex); //初试化模式对象
matcher = pattern.matcher(okString); //初始化匹配对象,用于检索mess
while(matcher.find()) {
String str = matcher.group();
set.add(str);
}
//将返回的arrayList对象放在jspContext中:
jspContext.setAttribute("words",set);
%>