定义一个叫<hello>的标签
当这个标签被调用时会在页面显示Hello World
首先写个类Hello.java
packeage com.test.hello;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class Hello extends TagSupport
{
public int doStartTag()
{
try
{
JspWriter out = pageContext.getOut();
out.println("Hello World Use Tag Library");
}
catch (Exception e)
{
System.out.println("Hello Tag Error :" + e);
}
return (SKIP_BODY);
}
}
定义新的标签时要先定义一个java类。即标签处理类,它会告诉Container遇到自定义标签时要执行那些操作。
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
这是每次制作标签时必须引入的套件。
在TagSupport类中,定义好doStartTag()这个方法。doStartTag()主要是不Container遇到所定义的标签时它会依doStartTag()方法中的内容处理。
此标签主要是显示字符串,所以首先要利用pageContext.getOut()来取得JspWriter,然后才能将字符串显示到网页上。程式执行完后一定要返回一个值,
这个程式中我回传了一个SKIP_BODY的值,SKIP_BODY的意思是告诉Container不需要对本体内容(body content)做处理。
<标签开始>本体内容</标签结束>
因为现在定义的Hello标签是空元素标签,因此没有所谓的本体内容,所以要回传SKIP_BODY的值。
Hello.java编译后,会产生{工程}\WEB-INF\classes\com\test\hello\Hello.class
然后定义TLD,一般会是{工程}\WEB-INF\tlds\ 这个目录下。比如现在的tld叫HelloTest.tld
HelloTest.tld
<?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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>My Taglib by JavaWorld.com.tw</description>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>HelloTest</short-name>
<uri></uri>
<small-icon></small-icon>
<tag>
<description>Example:Hello</description>
<name>Hello</name>
<tag-class>com.test.Hello</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
之后便是JSP了。
Hello.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="/WEB-INF/tlds/HelloTest.tld" prefix="TestTag" %>
<html>
<head>
<title>标签测试</title>
</head>
<body>
<h1><TestTag:Hello /></h1>
</body>
</html>