用发和标准标签库一样.唯一不同的是,自定义标签需要自己实现哈哈!
IterationTag接口:用于循环实现的接口,这个接口继承于Tag接口.新增了一个方法doAfterBody()和一个返回值的常量EVAL_BODY_AGAIN.
BodyTag接口:继承于IterationTag接口,新增两个方法
执行流程:
api已经有抽象类大致实现了以上步骤,只需重写几个自己需要的方法即可.TagSupport实现了IterationTag接口,BodyTagSupport实现了BodyTag接口.
简单标签则SimpleTagSupport实现继承于JspTag的SimpleTag接口.只需重写doTag方法就可完成简单的功能.
想要使用自己写好的标签还需要定义tld标签描述文件,然后在jsp页面引用.
标签以jar包形式出现,则标签必须放到META-INF目录或其子目录下.如果标签直接部署在web程序中,则标签描述文件必须在WEB-INF目录或其子目录下.
标签文件以 .tag 文件形式出现.以<% %>形式来完成功能,并且不用部署,写好后直接在jsp页面引用即可.
一、Java文件:
package firsttag; import java.io.IOException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; public class HelloTag implements Tag { private PageContext pageContext; private Tag parent; public HelloTag() { super(); } /** * *设置标签的页面的上下文 */ public void setPageContext(final PageContext pageContext) { this.pageContext = pageContext; } /** * *设置上一级标签 */ public void setParent(final Tag parent) { this.parent = parent; } /** * *开始标签时的操作 */ public int doStartTag() throws JspTagException { try { pageContext.getOut().println("Hello World!你好, 世界!<br/>"); } catch (java.io.IOException e) { throw new JspTagException("IO Error: " + e.getMessage()); } return SKIP_BODY; // 返回SKIP_BODY,表示不计算标签体 } /** * *结束标签时的操作 */ public int doEndTag() throws JspTagException { try { pageContext.getOut().write("Hello Java World!你好,Java 世界!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return EVAL_PAGE; } /** * *release用于释放标签程序占用的资源,比如使用了数据库,那么应该关闭这个连接。 */ public void release() { } public Tag getParent() { return parent; } }
<?xml version="1.0" encoding="ISO-8859-1" ?> <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"> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <description>this si....</description> <short-name>myT</short-name> <uri>http://leisure/taglib</uri> <tag> <description>Extends TagSupport</description> <name>hello</name> <tag-class>firsttag.HelloTag</tag-class> <body-content>jsp</body-content> </tag> </taglib>
<%@ taglib uri="/mytld.tld" prefix="mytag"%> <%@ page contentType="text/html ; charset=gb2312"%> <html> <head> <title>first cumstomed tag</title> </head> <body> <p> 以下的内容从Taglib中显示: </p> <mytag:hello/> </body> </html>