标记扩展基础
自定义行为实际上是一个自定义行为的标记处理器(tag handler)类,它从本质上来讲是一个bean。标记处理器必须实现由JSP规范定义的三个java接口中的一个。
实现标记处理器的所需要的接口和类都在javax.servlet.jsp.tagext程序包中。三个主要接口分别是:
1 Tag 接口定义了你在任何标记处理行为中都需要实现的方法。
2 IterationTag 接口扩展了Tag接口,并增加了行为元素的行为体上迭代所需要的方法。
3 BodyTag 接口扩展了IterationTag接口,并增加了用于访问行为元素的行为体的方法。
为了使开发标记更加容易,API定义了两个器支持作用的类:
1 TagSupport 类为Tag和IterationTag接口中的方法提供了默认的实现。
2 BodyTagSupport 类为BodyTag接口中的方法提供了默认的实现。
标记库是一个自定义行为的集合。自定义的所有标记一般都打包成一个标记库,处理标
记处理的类文件以外,标记库还必须包括一个TLD文件,它把所有自定义行为的名称都映射到相应的标记处理器类中。类文件和TLD可以打包到一个JAR文件中以方便安装。
一个简单的例子:
标记类 myFristTag
package com.Tag.Form;
import java.io.IOException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.TagSupport;
public class myFristTag extends TagSupport {
private String name = "Honglei Lee";
public void setName(String name) {
this.name = name;
}
public int doEndTag() throws JspException {
try {
pageContext.getOut().write(" Hello "+name);
} catch (IOException ex) {}
return EVAL_PAGE;
}
}
TLD 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>cctd</short-name>
<uri>cctd-form</uri>
<tag>
<name>HelloMr</name>
<tag-class>com.Tag.Form.myFristTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
</attribute>
</tag>
</taglib>
JSP 调用文件
<%@ taglib prefix="cctd" uri="cctd-form"%>
<html>
<body>
<cctd:HelloMr name="Honglei Lee"/>
</body>
</html>
此例子在浏览器显示 “ Hello Honglei Lee ”