标签开发

自定义标签由标签处理程序和标签的描述组成。当遇到特定标记时,标记处理程序就会告诉系统应该做什么。类中包含了请求期间将要执行的Java代码。标签的描述声明了怎么使用这个标签。标记可以带着属性和主体,这些属性和主体是可选的,最简单的标记可以没有属性和主体。以下是几种典型的标签。
[b] 1. 不带属性和主体的简单标签: <maytaglibs:SomeTag/>
2. 不带主体但是有属性的标签: <mytaglibs: SomeTag user="hello"/>
3. 带有主体和属性的标签: <mytaglibs:SomeTag user="hell" >
这里是标签体,可以是合法的JSP内容或者标签</mytaglibs:SomeTag>[/b]
另外,一个标签可以嵌套在另一个标签里面,这就使得标签可以有很强的也没内容管理能力。
标签的典型使用控制显示逻辑、访问数据库和内容迭代。

[b]实例:HelloWorld标签开发[/b]

在Tag接口中,主要定义的是和标签声明周期相关的方法,比如doStartTag()、doEndTag()等。在Tag中,可以通过pageContext对象访问JSP页面的上下文。下面我们结合标签的生命周期讨论标签的处理过程。传统的标签的生命周期描述如下:
[list]
(1) 当容器创建一个新的标签实例后,通过setPageContext设置标签的页面上下文

(2) 使用setParent方法设置这个标签的上一级标签。如果没有上一级嵌套,设置为null

(3) 设置标签的属性。这个属性在标签库描述文件中定义。如果没有定义属性,就不调用此类方法。

(4) 调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY。当返回EVAL_BODY_INCLUDE时,就计算标签的Body;如果返回SKIP_BODY就不计算标签的Body。

(5) 调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE。当返回EVAL_PAGE时,容器将在标签结束时继续计算JSP页面的其他部分;如果返回SKIP_PAGE
容器将在标签结束时停止计算JSP页面的其他部分。

(6) 调用release()方法释放标签程序占用的任何资源。
[/list]

[b]注意: 标签体是指位于标签开始和结束中间的部分,如
<mytag:test>helloworld</mytag:test>
在上面的标签中,HelloWorld为标签体。标签可以没有标签体,如
<mytag:test/>[/b]

在开发标签时,可以有两种选择,一种是直接实现原始的接口,另一种是从TagSupport类继承。

看看如何实现Tag接口
步骤:
1 开发标签实现类
2 编写标签描述,这个描述通常是以.tld结尾的文件
3 在web.xml中指定标签库的引用。

[b]开发实现类[/b]
位置:在WEB-INF\classes\目录下新建一个HelloTag_interface.java文件。

package com.text.ch13;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.util.Hashtable;
import java.io.Writer;
import java.io.IOException;
import java.util.Date;

/** 演示实现Tag接口的方式来开发标签程序*/
public class HelloTag_Interface implements javax.servlet.jsp.tagext.Tag
{

private PageContext pageContext;
private Tag parent;
public HelloTag_Interface()
{
super();
}
/** 设置标签的页面的上下文*/
public void setPageContext(final javax.servlet.jsp.PageContext pageContext)
{
this.pageContext = pageContext;
}
/** 设置上一级标签*/
public void setParent(final javax.servlet.jsp.tagext.Tag parent)
{
this.parent = parent;
}
/** 开始标签时的操作*/
public int doStartTag()throws javax.servlet.jsp.JspTagException
{
return SKIP_BODY; // 返回SKIP_BODY,表示不计算标签体
}
/** 结束标签时的操作*/
public int doEndTag()throws javax.servlet.jsp.JspTagException
{
try{
pageContext.getOut().write("HelloWorld ! ");
}catch(java.io.IOException e)
{
throw new JspTagException("IO Error:" + e.getMessage());
}
return EVAL_PAGE;
}
/** Release 用于释放标签程序占用的资源*/
public void release(){}

public javax.servlet.jsp.tagext.Tag getParent()
{
return parent;
}
}


[b]编写标签库描述[/b]
在WEB-INF\tlds目录下建立一个mytag.tld文件,

<?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">
<description> A tag library exercising SimpleTag handlers</description>
<tlib-version>1.0</tlib-version>
<short-name>examples</short-name>
<uri>/demotag</uri>
<description>
标签学习
</description>

<tag>
<description> Outputs Hello, World</description>
<name>hello_int</name>
<tag-class>com.test.ch13.HelloTag_Integerface</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
标签的真正描述就是黑体字部分。首先要指定标签的名字,然后指定标签的实现类,接下来指定标签体,由于没有标签体(<body-content>),这里就指定位empty。

[b]使用自定义标签[/b]
要使用自定义标签,需要在web.xml描述文件中指定对标签的引用。
[code="xml"]
<web-app>
.....
<taglib>
<taglib-uri>/demotag</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytag.tld</taglib-location>
</taglib>
</web-app>


万事俱备现在看看JSP中的使用吧

<%@taglib uri="/demotag" prefix="hello"%>
<%@page contentType="text/html; charset=gb2312" language="java"%>
<html>
<head>
<title> Test page</title>
<meta fttp-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body>
<p>下面的内容从Taglib中显示:</p>
<p><i><hello:hello_init></p>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值