java 自定义taglib_[JSP]自定义标签库taglib

java 自定义taglib_[JSP]自定义标签库taglib自定义标签的步骤大概有三步 1 继承 javax servlet jsp tagext 下提供的几个标签类 如 Tag TagSupport BodyTagSuppo SimpleTagSup JSP2 0 2 在 tld 文件中配置标签库信息 以及标签与实现类的映射 3 在 jsp 文件中引用自定义标签 标签 APITag 接口 doEndTag 执行当前标签实例的结束标签 在 doStartT

自定义标签的步骤大概有三步:

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

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

copyright

notes.javaee.jsp.taglib.Copyright

JSP

Copyright tag.

lshortname指明推荐使用的prefix。

luri指明引用这个标签库时使用的uri。

ltag指明要定义标签的信息。

其中,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中配置。

http://notes.javaee.jsp.com/taglib

/WEB-INF/taglib.tld

或者在JSP中直接使用

实例

使用TagSupport自定义标签

1.继承标签API

定义一个HelloTag类,继承TagSupport类。

HelloTag.java:packagenotes.javaee.jsp.taglib;

importjavax.servlet.jsp.JspException;

importjavax.servlet.jsp.tagext.TagSupport;

publicclassHelloTagextendsTagSupport {

privatestaticfinallongserialVersionUID= -L;

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:

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

结果:

1274a26b7ef7a0ce9c1d95418509cb93.png

使用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:

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

结果:

ed5164d1b40fcfb572bfe1bee4980b36.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223883.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:13
下一篇 2026年3月17日 下午1:13


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号