創(chuàng)建和使用一個(gè)Tag Library的基本步驟
1、創(chuàng)建標(biāo)簽的處理類(Tag Handler Class)
2、創(chuàng)建標(biāo)簽庫描述文件(Tag Library Descrptor File)
3、在web.xml文件中配置元素
4、在JSP文件中引人標(biāo)簽庫
標(biāo)簽庫程序應(yīng)該有一下幾部分組成:
標(biāo)簽的具體實(shí)現(xiàn)文件(*.java)
標(biāo)簽的描述文件(*.tld)
如果需要可以在web.xml中進(jìn)行配置
在jsp中通過標(biāo)簽進(jìn)行自定義標(biāo)簽的調(diào)用
*.tld文件是標(biāo)簽的描述文件,此文件對(duì)標(biāo)簽庫的運(yùn)行起決定性作用。*.tld文件也是一個(gè)XML文件,如果是使用XML,則需要DTD、SCHEMA支持。
標(biāo)簽庫的接口和類的繼承關(guān)系:
JsTag<interface>←←SimpleTag<interface>←←SimpleTagSupport<class>
JsTag<interface>←←Tag<interface>←←Iterater Tag<interface>←←TagSupport<class>←←BodyTagSupport<class>
幾種典型的標(biāo)簽: 不帶屬性和主體的簡單標(biāo)簽:<mytaglibs:SomeTag/>
有屬性沒有主體的標(biāo)簽: <mytaglibs:SomeTag user="hellking"/>
帶有主體和屬性的標(biāo)簽: <mytaglibs:SomeTag user="hellking"/>主體部分可以是jsp內(nèi)容或標(biāo)簽</mytaglibs:SomeTag>
傳統(tǒng)的標(biāo)簽的生命周期: 1.setPageContext:當(dāng)容器創(chuàng)建一個(gè)新的標(biāo)簽后,通過setPageContext來設(shè)置標(biāo)簽頁面的上下文;
2.setParent:使用setParent方法設(shè)置一個(gè)標(biāo)簽的上一級(jí)標(biāo)簽,如果沒有上一級(jí),設(shè)為NULL;
3.setAttribute:設(shè)置標(biāo)簽的屬性,這個(gè)屬性在標(biāo)簽描述文件中定義,如果沒有定義屬性,則不用調(diào)用此方法;
4.doStartTag():調(diào)用doStartTag()方法,當(dāng)返回EVAL_BODY_INCLUDE時(shí),就計(jì)算body,返回SKIP_BODY反之;
5.doEndTag():調(diào)用doEndTag()方法,當(dāng)返回EVAL_PAGE時(shí),容器將在標(biāo)簽結(jié)束時(shí)繼續(xù)計(jì)算JSP的其他部分,SKIP_PAGE反之;
6.release():調(diào)用release()方法釋放標(biāo)簽程序占用的任何資源。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
3 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
4 <taglib>
5 <tlib-version>1.0</tlib-version>
6 <jsp-version>2.0</jsp-version>
7 <short-name>hello</short-name>
8 <tag>
9 <name>shan</name>
10 <tag-class>org.zzn.demo01.Hello</tag-class>
11 <body-content>empty</body-content>
12 </tag>
13 </taglib>
建立Java文件代碼:
1 package org.zzn.demo01;
2 import java.io.IOException;
3 import javax.servlet.jsp.JspException;
4 import javax.servlet.jsp.JspWriter;
5 import javax.servlet.jsp.tagext.TagSupport;
6
7 public class Hello extends TagSupport {
8 @Override
9 public int doStartTag() throws JspException {
10 //向jsp頁面中打印“蜘蛛俠”字符串
11 String str = "蜘蛛俠";
12 JspWriter out = pageContext.getOut();
13 try {
14 out.println(str);
15 } catch (IOException e) {
16 // TODO Auto-generated catch block
17 e.printStackTrace();
18 }
19 return TagSupport.SKIP_BODY;
20 }
21 }
22
建立jsp文件代碼:
1 <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
2 <%@ taglib uri="/WEB-INF/hello.tld" prefix="zzn"%>
3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4 <html>
5 <head>
6 <title>My JSP 'Hello.jsp' starting page</title>
7 </head>
8 <body>
9 <h2><zzn:shan/></h2>
10 </body>
11 </html>