在jsp编译阶段,遇到了自定义标签就会自动执行doStartTag();
本文主要讲解传统方式的自定义标签使用的步骤:
1.创建一个后缀名为.tld的文本文件,将它复制到web-inf里面。
<?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>迭代器标签</description>
<tlib-version>1.0</tlib-version>
<short-name>tag</short-name><!--简称 -->
<uri>http://www.luzelong.com</uri>
<!-- 自定义标签的相关信息 -->
<tag>
<description>标签描述</description>
<name>hhl</name>
<tag-class>com.luze.tag.MyIteration</tag-class>
<body-content>JSP</body-content>
<!--给处理类加属性-->
<attribute>
<name>n</name>
<required>true</required><!--true表示该属性必写-->
</attribute>
</tag>
注意tag-class 属性写的是他的实现类,就是下面的我们要创建的类!
2.创建一个继承javax.servlet.jsp.tagext.TagSupport的类。
package com.luzelong.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class MyIteration extends TagSupport {
private int n;//执行次数
public void setNum(int n){
this.n = n ;
}
//执行标签时
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;//先执行一次
}
//执行完毕后
@Override
public int doAfterBody() throws JspException {
n--;
return n>0?EVAL_BODY_AGAIN:SKIP_BODY;//当n>0 重复执行 SKIP_BODY 是不执行
}
}
3.jsp文件前面加上下面代码,构成连接
<%@ taglib uri="http://www.luze.com" prefix="lzl" %>
4.具体使用
<body>
<lzl:hhl n="3">love </lzl:hhl>
</body>
执行结果为love love love