小弟是以SimpleTagSupport为例的,还可以使用TagSupport等....
以我自己创建的一个例子作为介绍吧..
工程目录如下:
实现<tw:Hello/>
第一步:创建标签类(HelloTag)
package biaoqian;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTagextends SimpleTagSupport {
//重写doTag()方法实现标签的作用
public void doTag()throws JspException, IOException {
//使用了getJspContext()方法来获取当前的JspContext对象
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
第二步:创建tld文件(WebContent/WEB-INF/)
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>Hello</name> //标签名
<tag-class>biaoqian.HelloTag</tag-class> //标签处理类
<body-content>empty</body-content>
</tag>
</taglib>
注释:
body-content标签有4个值:empty,JSP,scriptless,tagdependent:
empty:它是一个空的标签体。
JSP:是允许标签体内出现JSP脚本,也就是java代码。
scriptless:可以接受文本,EL表达式,和JSP的动作。
tagdependent:它是指在标签体的内容可以直接被写入bodyContent,由自定义标签处理类来处理,而不被JSP容器所解析。
第三步:在jsp文件中实现标签
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="tw"uri="WEB-INF/custom.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- prefix的tw可以自己换成其他的 -->
<tw:Hello/>
</body>
</html>
第四步:显示结果
Hello Custom Tag!
上面是没有使用到标签体的,要使用标签体的话,如下:
实现:
<tw:Hello>
This is message body
</tw:Hello>
第一步:将HelloTag类中的doTag方法改为:
StringWriter sw = new StringWriter();
public void doTag()
throws JspException, IOException
{
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
注释:
getJspBody();//获得标签容器 invoke()显示标签体。
获得pageContext对象:(PageContext)getJspContext();
获得request对象:pageContext.getRequest();
第二步:将tld文件中tag标签下的<body-content>属性改为scriptless
第三步:在jsp文件中使用该标签的时候改为:
<tw:Hello>
This is message body
</tw:Hello>
第四步:输出:This is message body
使用标签属性显示内容:
实现:
<ex:Hello message="This is custom tag" />
第一步:将HelloTag类的内容改为:
public class HelloTag extends SimpleTagSupport {
private String message;
public void setMessage(String msg) {
this.message = msg;
}
StringWriter sw = new StringWriter();
public void doTag() throws JspException, IOException
{
if (message != null) {
/* 从属性中使用消息 */
JspWriter out = getJspContext().getOut();
out.println( message );
}
else {
/* 从内容体中使用消息 */
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
}
}
第二步:将tld文件中的tag下加上:
<attribute>
<name>message</name>
</attribute>
第三步:将jsp文件改为<tw:Hello message="This is custom tag" />
第四步:输出 This is custom tag
属性还有:
name 定义属性的名称。每个标签的是属性名称必须是唯一的。
required 指定属性是否是必须的或者可选的,如果设置为false为可选。
rtexprvalue 声明在运行表达式时,标签属性是否有效。
type 定义该属性的Java类类型 。默认指定为 String
description 描述信息
fragment 如果声明了该属性,属性值将被视为一个 JspFragment。