当jsp中有比较复杂的逻辑时,我们会在jsp中很多java代码,这样会让jsp的结构看起来很乱。jstl可以解决这个问题。但是jstl里面的标签的数量是有限的。当我们需要更复杂的逻辑时就需要自己去定义标签。
使用自定义标签有三个步骤:
-
定义标签类
-
对标签类进行配置。
-
在jsp中使用该标签。
具体步骤:
//自定义标签类
public class MyTag extends SimpleTagSupport {
private boolean test;//用来接收标签的属性
private String abc;
@Override
public void doTag() throws IOException, JspException {
System.out.println("abc属性的值为:"+abc);
if(test){
//表示将标签的内容输出到页面上
getJspBody().invoke(null);//hello world就会打印jsp页面上
}
}
public String getAbc() {
return abc;
}
public void setAbc(String abc) {
this.abc = abc;
}
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
}
2.对标签类进行配置。在WEB-INF里面定义一个xxxx.tld文件。文件名随便起。多个标签类可以配置在这一个配置文件中,使用多个tag标签就可以了。
<?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中要使用标签时,taglib指令 prefix,url的值 -->
<short-name>mytaglib</short-name>
<!--定义此标签库的uri路径,用于唯一标识该数据库,便于页面的引用-->
<uri>http://www.xxxx.com/mytaglib</uri>
<!--此标签库中的一个标签处理器的声明-->
<tag>
<!--该标签名称(必须元素)-->
<name>abc</name>
<!--该标签处理类的全限定名(必须元素)-->
<tag-class>com.tag.MyTag</tag-class>
<!-- 定义标签体支持JSP脚本 -->
<body-content>scriptless</body-content>
<!-- 配置标签属性 -->
<attribute>
<name>test</name><!--这个标签里面有属性test-->
<required>true</required><!--表示这个属性是不是必须的属性-->
<rtexprvalue>true</rtexprvalue><!--这个属性支持el表达式-->
</attribute>
<attribute>
<name>abc</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3.先引入taglib指令。在jsp中使用abc标签
<%@taglib prefix="mytaglib" uri="http://www.xxxx.com/mytaglib"%>
<mytaglib:abc test="${param.age>20}" abc="helloworld">
hellozhangsan
</mytaglib:abc>