例子:使用random标签产生1个10至200之间的随机数
1.继承TagSupport,实现doStartTag()方法
package org.fanzone.tag;
import java.io.IOException;
import java.util.Random;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
@SuppressWarnings("serial")
public class RandomTag extends TagSupport {
private int min = 0;
private int max = Integer.MAX_VALUE;
public int getMin() {
return min;
}
public void setMin(int min) {
this.min = min;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
@Override
public int doStartTag() throws JspException {
Random random = new Random();
int result = random.nextInt(max-min);
try {
this.pageContext.getOut().write(String.valueOf(result));
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
2.编写TLD(Tag Library Descriptor--标签库描述符)
<?xml version="1.0" encoding="UTF-8"?>
<taglib
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"
>
<description>Userdefined TagLib</description>
<tlib-version>1.0</tlib-version>
<short-name>ct</short-name>
<uri>http://org.mars.com/tag</uri>
<tag>
<description>Random Number</description>
<name>random</name>
<tag-class>org.mars.tag.RandomTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>min</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>max</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
-------------------------------------------------------------------
要想使一个自定义标签正常工作,必须在TLD文件中对该标签进行配置。在TLD文件中主要配置如下两部分内容: 标签库的配置信息 标签库中具体标签的配置信息 标签库的配置信息主要包括如下的内容: 标签库的版本:使用<tlib-version>标签设置。 正常使用标签库中的标签所需要的最低JSP版本:使用<jsp-version>标签设置。 标签库的默认前缀:使用<short-name>标签设置。 标签库的URI:使用<uri>标签设置。 标签库的描述信息:使用<description>标签设置。 标签的配置信息主要包括如下的内容: 标签名:使用<name>标签设置。 标签对应的Java类:使用<tag-class>标签设置。 标签体的类型:使用<body-content>标签设置。 标签的描述信息:使用<description>标签设置。 标签属性的信息:每一个标签属性对应一个<attribute>标签。在<attribute>标签中可以指定标签名(使用<name>标签设置)、该属性是否必须指定(使用<required>标签设置)、该属性是否支持动态属性值(使用<rtexprvalue>标签指定)等配置信息。
---------------------------------------------------------------------
3.测试标签
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://org.mars.com/tag" prefix="ct"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<ct:random min="1" max="200"/>
</body>
</html>