例如我们在一个html文档中写一个自定义的标签

<%@taglib uri="" prefix="c1"%>    //uri是一个命名空间,perfix是一个前缀


在html的正文中我们写上 <c1: msg="" qty="">     //c1就是这个标签的标签名,msg和qty是属性


我们要定义这个标签就要先些上这个标签的类,这个类要继承SimpleTagSupport

public class HelloTag extends SimpleTagSupport{
    //写上属性,要与标签中的属性一一对应,而且一定要写上set方法
    private String msg;
    private int qty;
    public void setMsg(Strig msg){
        this msg=msg;
    }
    public void setQty(int qty){
        this qty=qty;
    }
    //按住右键找到source 找到override 找到dotag方法,将其覆盖
    public void doTag() throws JspException, IOException {
       PageContext page=(PageContext)getJspContext();//得pageContext得天下
	JspWriter out=page.getOut();//从而获得输出流
	//下面是具体业务逻辑
	for(int i=0;i<100;i++){
		out.println("hello world");
	}
		
	}
    }
}

最后写个描述文件(相当与在自定义的标签与类定义之间的一个桥梁的作用)

在WEB-INF下建一个mytag.tld的描述性文件(可以参照c.tld)

<?xml?>描述文件

<taglib ssssss>

<tlib-version>1.1

<short-name>c1     //这就是个前缀

<uri>test          //命名空间

<tag>

<name>hello</name>

<tag-class>tag.HelloTag</tag-class>

<bady-content>empty</bady-content>

//有三个值empty 没有标签体;scriptless 可以有标签体,但是标签体的内容不能有java代码(《% %》 //《%= %》《%! %》);jsp 有标签体,可以写java代码,但是只有复杂有,我们学的简单没有这个了

<attribute>

<name>

<required>true</required>//表示必须要赋值

<rtexprvalue>true    //表示可以动态赋值,可以用el表达式来赋值  

</attribute>

</tag>

</taglib>



自定义标签的总结:

1,要写上一个自定义标签的类

2,要写一个在WEB-INF下写一个对这个标签的描述性文件

3,就可以在html中使用了