目录
- 自定义标签的步骤
- 标签API
- Tag接口
- TagSupport类
- SimpleTag接口(JSP2.0)
- SimpleTagSupport类(JSP2.0)
- tld标签库描述文件
- taglib主要元素
- 实例
- 使用TagSupport自定义标签
- 使用SimpleTagSupport自定义标签(JSP2.0)
自定义标签的步骤大概有三步:
1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。
2.在tld文件中配置标签库信息,以及标签与实现类的映射。
3.在jsp文件中引用自定义标签。
标签API
Tag接口
doEndTag():执行当前标签实例的结束标签。在doStartTag()执行后调用
doStartTag():执行当前标签实例的开始标签。
getParent():获取当前标签的父标签
release():释放当前标签的状态
setPageContext(PageContext):设置当前标签的页面
setParent(Tag):设置当前标签的父标签
TagSupport类
TagSupport类是实现Tag接口的一个模板类。它实现了Tag接口的大部分方法,用户只需要实现doStartTag()和doEndTag()方法。
SimpleTag接口(JSP2.0)
JSP2.0的接口,比Tag接口更简单。
doTag():执行当前标签的所有处理任务。
getParent():获取当前标签的父标签。
setJspBody(JspFragment):提供当前标签的实体为一个JspFragment对象
setJspContext(JspContext):设置JSP页面的
setParent(JspTag):设置当前标签的父标签。
SimpleTagSupport类(JSP2.0)
SimpleTagSupport类是实现SimpleTag接口的一个模板类。它实现了SimpleTag接口的大部分方法,用户只需要实现doTag()方法。
tld标签库描述文件
tld全称为Tag Library Description,即标签库描述文件。
tld文件用来配置标签库的基本信息。
taglib主要元素
taglib.tld
<?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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlibversion>1.0</tlibversion>
<jspversion>2.0</jspversion>
<shortname>taglib</shortname>
<uri>http://notes.javaee.jsp.com/taglib</uri>
<info>Private Taglib</info>
<tag>
<name>copyright</name>
<tagclass>notes.javaee.jsp.taglib.Copyright</tagclass>
<bodycontent>JSP</bodycontent>
<info>Copyright tag.</info>
</tag>
</taglib>
l shortname指明推荐使用的prefix。
l uri指明引用这个标签库时使用的uri。
l tag指明要定义标签的信息。
其中,tag可以设置的属性如下:
属性
描述
name
定义属性的名称。每个标签的是属性名称必须是唯一的。
tagclass
指定映射的Java类。
required
指定属性是否是必须的或者可选的,如果设置为false为可选。
rtexprvalue
声明在运行表达式时,标签属性是否有效。
type
定义该属性的Java类类型 。默认指定为String。
description
描述信息。
fragment
如果声明了该属性,属性值将被视为一个JspFragment。
bodycontent
指明标签体的限制,有3种取值:empty、JSP和tagdependent
empty:不允许有标签体存在。
JSP:允许有标签体存在。
tagdependent:允许有标签体存在,但是标签体内的JSP代码不会被执行。
如果tld文件位于/WEB-INF/下面,Tomcat会自动加载tld文件中的标签库。如果位于其他的位置,可以在web.xml中配置。
<jsp-config>
<taglib>
<taglib-uri>http://notes.javaee.jsp.com/taglib</taglib-uri>
<taglib-location>/WEB-INF/taglib.tld</taglib-location>
</taglib>
</jsp-config>
或者在JSP中直接使用
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="taglib"%>
实例
使用TagSupport自定义标签
1. 继承标签API
定义一个HelloTag类,继承TagSupport类。
HelloTag.java:
package notes.javaee.jsp.taglib;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloTag extends TagSupport {
private static final long serialVersionUID = -8828591126748246256L;
private String name;
@Override
public int doEndTag() throws JspException {
try {
this.pageContext.getOut().println("Hello, " + name);
} catch (Exception e) {
throw new JspException(e);
}
return EVAL_PAGE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2. 在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
<shortname>指明推荐使用的prefix为taglib。
<uri>指明引用这个标签库时使用的uri为http://notes.javaee.jsp.com/taglib。
<tag>定义要引用的标签信息。<name>指明标签名,<tagclass>指明映射的Java类,和前面的对应。
然后定义这个标签的属性。因为前面Java类中的属性为name,这里也要对应上。
taglib.tld:
<?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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlibversion>1.0</tlibversion>
<jspversion>2.0</jspversion>
<shortname>taglib</shortname>
<uri>http://notes.javaee.jsp.com/taglib</uri>
<info>Private Taglib</info>
<tag>
<name>hello</name>
<tagclass>notes.javaee.jsp.taglib.HelloTag</tagclass>
<bodycontent>empty</bodycontent>
<info>Hello tag with parameters.</info>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3. 在jsp文件中引用标签
前面在tld文件中配置了各个关键信息,现在就可以直接在jsp文件中使用了。
首先,需要在jsp文件中引入标签库文件。这里和标准标签库JSTL一样,使用taglib关键字来说明要引入的是标签库。uri是引入地址,prefix是标签库关键字。
<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>
由于前面定义的标签name为hello,所以可以使用的标签名为:prefix+name,即:taglib:hello。
Hello.jsp:
<%@ page language="java"contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<taglib:hello name="World"/> <br/>
</body>
</html>
结果:
使用SimpleTagSupport自定义标签(JSP2.0)
1. 继承标签API
定义一个HelloTag类,继承SimpleTagSupport类。
PersonTag.java:
package notes.javaee.jsp.taglib2;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class PersonTag extends SimpleTagSupport {
private String name;
private String sex;
private int age;
@Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().write(
"[Person Info]name: " + name + ", sex: " + sex + ", age:" + age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
关键配置信息基本和使用TagSupport自定义标签范例中一样。但是由于对应Java类中有3个属性,需要一一对应上。
taglib.tld:
<?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 web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlibversion>1.0</tlibversion>
<jspversion>2.0</jspversion>
<shortname>taglib</shortname>
<uri>http://notes.javaee.jsp.com/taglib</uri>
<info>Private Taglib</info>
<tag>
<name>person</name>
<tagclass>notes.javaee.jsp.taglib2.PersonTag</tagclass>
<bodycontent>empty</bodycontent>
<info>person info tag</info>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>sex</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>age</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3.在jsp文件中引用标签
引用标签方式和使用TagSupport自定义标签范例一样。
personTag.jsp:
<%@ page language="java"contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://notes.javaee.jsp.com/taglib"prefix="taglib"%>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<taglib:person name="Alex"sex="man" age="18"/>
</body>
</html>
转自:http://www.cnblogs.com/jingmoxukong/p/5318716.html