jsp自定义标签的使用以及tld文件配置总结

时间:2022-10-02 13:40:41

第一步:在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执行

 

提示:蓝色字体为项目中需添加的代码,红色字体为控制台的打印内容,黑色字体为步骤描述