第一步:在WEB-INF目录下(即与web.xml同级目录)添加名为"my.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><!-- 标签库依赖的JSP版本 -->
<short-name>MyTag</short-name> <!-- 标签的简写 -->
<uri>http://www.com.cn/tag/my</uri><!-- 指定这个标签的uri信息 -->
<description>My Framework JSP Tag Library.</description><!-- 本标签的描述 -->
<tag>
<name>message</name><!-- 标签名字 -->
<tag-class>com.ntong.tag.MessageTag</tag-class><!-- 指定标签的类 -->
<body-content>empty</body-content><!-- 标签主体的内容 empty表示这个标签可以直接结尾,不需要填写内容 jsp表示标签体由其他jsp元素组成 -->
<attribute>
<name>key</name>
<required>true</required><!-- 这个参数是否必填 -->
</attribute>
<attribute>
<name>nameSpace</name>
</attribute>
</tag>
<!-- tag -->
<tag>
<name>testTag</name>
<tag-class>com.ntong.tag.testTag</tag-class>
<description>test</description>
<attribute>
<name>forward</name>
<required>true</required><!-- 这个参数是否必填 -->
<rtexprvalue>true</rtexprvalue><!-- 这个标签的值可以写入 -->
<description>
<![CDATA[
tag shuoming
]]>
</description>
</attribute>
<attribute>
<name>canshu</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>
<![CDATA[
can shu shuo ming
]]>
</description>
</attribute>
</tag>
</taglib>
第二步:在web.xml文件中添加如下代码
<taglib>
<taglib-uri>http://www.com.cn/tag/my</taglib-uri>
<taglib-location>/WEB-INF/my.tld</taglib-location>
</taglib>
第三步:编写my.tld文件的标签类,该tld文件中自定义了2个标签,因此对应有两个标签类
第一个java实现类代码如下
package com.ntong.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 可继承BodyTagSupport
* 重载BodyTagSupport类的方法
* 编写标签对应的实现类时,需要重载BodyTagSupport类的几个方法:doStartTag(),setBodyContent(),doInitBody(),doAfterBody(),doEndTag()
* 执行顺序:doStart(),doInitBody(),setBodyContent(),doAfterBody(),doEndTag
* @author Administrator
* 该类直接继承TagSupport
*
*/
public class testTag extends TagSupport {
public String a;
public String b;
//重载doStartTag方法
public int doStartTag() throws JspException {
System.out.println("doStartTag执行");
return 0;
}
//重载doEndTag方法
public int doEndTag() throws JspException {
System.out.println("doEndTag执行");
return 6;
}
//重载doAfterBody方法
public int doAfterBody() throws JspException {
System.out.println("doAfterBody执行");
return 0;
}
public testTag() {
System.out.println("testTag实例化");
}
public void setCanshu(String a) {
System.out.println("canshu标签输入的值为:" + a);
this.a = a;
}
public void setForward(String b) {
System.out.println("forward标签的值为:" + b);
this.b = b;
}
}
第二个java实现类代码如下
package com.ntong.tag;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.TagSupport;
public class MessageTag extends TagSupport
{
public MessageTag()
{
System.out.println("MessageTag的实例化了");
}
public int doEndTag()
throws JspException
{
return 6;
}
public String getNameSpace()
{
return a;
}
public void setNameSpace(String s)
{
a = s;
}
public Object getKey()
{
return _fldif;
}
public void setKey(Object obj)
{
System.out.println("set++++" + obj);
_fldif = obj;
}
private Object _fldif;
private String a;
}
第四步:到这里自定义标签已经OK了,接下来就是在jsp页面中使用自定义的标签
首先在jsp页面引入tag标签(将下面的代码放入jsp页面的最顶端)
<%@ taglib prefix="my" uri="http://www.com.cn/tag/my" %>
然后在body中就可以使用定义好的标签了,代码如下
<my:message key="setk"/>
<my:testTag forward="http://localhost:8080" canshu="post"></my:testTag>
第五步:启动web服务器(如tomcat),访问第四步中的jsp页面,控制台将会输出如下内容,说明我们自定义的标签成功了
MessageTag的实例化了
set++++setk
testTag实例化
forward标签的值为:http://localhost:8080
canshu标签输入的值为:post
doStartTag执行
doEndTag执行
提示:蓝色字体为项目中需添加的代码,红色字体为控制台的打印内容,黑色字体为步骤描述