自定义标签包括以下三个步骤:
1 .继承javax.servlet.JSP.tag ext.*中提供的一些标记类,例如tag、TagSupport、BodyTagSupport和simpletagsupport(JSP2.0 )
2 .在TLD文件中设置标记库信息以及标记和实现类的映射。
3 .在JSP文件中引用自定义标记。
标签API
Tag接口
doEndTag () :为当前标签实例执行结束标签。 doStartTag ) )执行后调用
doStartTag () :为当前标签实例执行开始标签。
getParent (:获取当前标记的父标记
release () :释放当前标签的状态
设置页面上下文(pagecontext ) :用于设置当前选项卡的页面
setparent(tag ) :设置当前标记的父标记
TagSupport类
TagSupport类是实现Tag接口的模板类。 实现Tag接口的大多数方法,用户只需实现doStartTag (和doEndTag )方法。
简单标签接口(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
库描述,即标记库描述文件。
tld文件用于设置标记库的基本信息。
taglib的主要元素
taglib.tld? XML version=' 1.0 ' encoding=' utf-8 '?
xmlns=' http://Java.sun.com/XML/ns/J2EE '
xmlns 3360 xsi=' http://www.w3.org/2001/XML架构-instance '
xsi :方案位置=' http://Java.sun.com/XML/ns/J2EE
web-jsptaglibrary_2_0.xsd '
version='2.0 '
1.0
2.0
标签
3358 notes.javaee.JSP.com/taglib
私有标记
版权所有
notes.javaee.JSP.taglib.copyright
JSP
版权标签。
lshortname表示推荐的prefix。
luri表示浏览此标记库时使用的uri。
ltag表示定义标签的信息。
其中,tag可以设置的属性如下: 属性说明
name定义属性的名称。 每个标签的属性名称必须是唯一的。
tagclass指定要映射的Java类。
required指定属性是必需的还是可选的。 如果设置为false,则为可选。
rtexprvalue声明在执行表达式时声明标签属性是否有效。
type定义此属性的Java类类型。 默认值为字符串。
描述描述信息。
如果声明了fragment属性,则将属性值视为JspFragment。
bodycontent表示标签本身的限制,取empty、JSP、tagdependent个值
empty :不允许标签体的存在。 JSP :允许标签体的存在。 tagdependent :允许标记主体存在,但不执行标记主体内的JSP代码。
如果tld文件位于/WEB-INF/下,则Tomcat会自动加载tld文件中的标记库。 如果在其他位置,可以在web.xml中设置。
3358 notes.javaee.JSP.com/taglib
/WEB-INF/taglib.tld
或直接在JSP中使用
实例
使用TagSupport自定义标签
1 .继承标签API
定义继承TagSupport类的HelloTag类。
hello tag.Java : package notes.javaee。
jsp.taglib;importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.TagSupport;
publicclassHelloTagextendsTagSupport {
privatestaticfinallongserialVersionUID= -8828591126748246256L;
privateStringname;
@Override
publicintdoEndTag()throwsJspException {
try{
this.pageContext.getOut().println("Hello, "+name);
}catch(Exceptione) {
thrownewJspException(e);
}
returnEVAL_PAGE;
}
publicString getName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name=name;
}
}
2.在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
指明推荐使用的prefix为taglib。
定义要引用的标签信息。指明标签名,指明映射的Java类,和前面的对应。
然后定义这个标签的属性。因为前面Java类中的属性为name,这里也要对应上。
taglib.tld:<?xmlversion ="1.0"encoding="UTF-8" ?>
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">
1.0
2.0
taglib
http://notes.javaee.jsp.com/taglib
Private Taglib
hello
notes.javaee.jsp.taglib.HelloTag
empty
Hello tag with parameters.
name
true
true
3.在jsp文件中引用标签
前面在tld文件中配置了各个关键信息,现在就可以直接在jsp文件中使用了。
首先,需要在jsp文件中引入标签库文件。这里和标准标签库JSTL一样,使用taglib关键字来说明要引入的是标签库。uri是引入地址,prefix是标签库关键字。
由于前面定义的标签name为hello,所以可以使用的标签名为:prefix+name,即:taglib:hello。
Hello.jsp:
Insert title here结果:
使用SimpleTagSupport自定义标签(JSP2.0)
1.继承标签API
定义一个HelloTag类,继承SimpleTagSupport类。
PersonTag.java:packagenotes.javaee.jsp.taglib2;
importjava.io.IOException;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
publicclassPersonTagextendsSimpleTagSupport {
privateStringname;
privateStringsex;
privateintage;
@Override
publicvoiddoTag()throwsJspException, IOException {
this.getJspContext().getOut().write(
"[Person Info]name: "+name+", sex: "+sex+", age:"+age);
}
publicString getName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name=name;
}
publicString getSex() {
returnsex;
}
publicvoidsetSex(Stringsex) {
this.sex=sex;
}
publicintgetAge() {
returnage;
}
publicvoidsetAge(intage) {
this.age=age;
}
}
2.在tld中配置标签库信息
在/WEB-INF下新建taglib.tld文件。
关键配置信息基本和使用TagSupport自定义标签范例中一样。但是由于对应Java类中有3个属性,需要一一对应上。
taglib.tld:<?xmlversion ="1.0"encoding="UTF-8" ?>
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">
1.0
2.0
taglib
http://notes.javaee.jsp.com/taglib
Private Taglib
person
notes.javaee.jsp.taglib2.PersonTag
empty
person info tag
name
true
true
sex
true
true
age
true
true
3.在jsp文件中引用标签
引用标签方式和使用TagSupport自定义标签范例一样。
personTag.jsp:
Insert title here结果: