简单的标签编程【学习笔记】
创建和使用一个Tag Library的基本步骤1、创建标签的处理类(Tag Handler Class)
2、创建标签库描述文件(Tag Library Descrptor File)
3、在web.xml文件中配置元素
4、在JSP文件中引人标签库
标签库程序应该有一下几部分组成:
标签的具体实现文件(*.java)
标签的描述文件(*.tld)
如果需要可以在web.xml中进行配置
在jsp中通过标签进行自定义标签的调用
*.tld文件是标签的描述文件,此文件对标签库的运行起决定性作用。*.tld文件也是一个XML文件,如果是使用XML,则需要DTD、SCHEMA支持。
标签库的接口和类的继承关系:
JsTag<interface>←←SimpleTag<interface>←←SimpleTagSupport<class>
JsTag<interface>←←Tag<interface>←←Iterater Tag<interface>←←TagSupport<class>←←BodyTagSupport<class>
几种典型的标签:
不带属性和主体的简单标签:<mytaglibs:SomeTag/>
有属性没有主体的标签: <mytaglibs:SomeTag user="hellking"/>
带有主体和属性的标签: <mytaglibs:SomeTag user="hellking"/>主体部分可以是jsp内容或标签</mytaglibs:SomeTag>
传统的标签的生命周期:
1.setPageContext:当容器创建一个新的标签后,通过setPageContext来设置标签页面的上下文;
2.setParent:使用setParent方法设置一个标签的上一级标签,如果没有上一级,设为NULL;
3.setAttribute:设置标签的属性,这个属性在标签描述文件中定义,如果没有定义属性,则不用调用此方法;
4.doStartTag():调用doStartTag()方法,当返回EVAL_BODY_INCLUDE时,就计算body,返回SKIP_BODY反之;
5.doEndTag():调用doEndTag()方法,当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP的其他部分,SKIP_PAGE反之;
6.release():调用release()方法释放标签程序占用的任何资源。
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文件代码:
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 >
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
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 >
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 >