转载自http://hi.baidu.com/java__sc/blog/item/56396d3eb33e8b3d70cf6c02.html
1 TagSupport与BodyTagSupport的区别
TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果需要交互就用BodyTagSupport。
交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。
用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport。
2 doStartTag(),doEndTag()
doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页
doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。
预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.
如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:
doStartTag() ->不显示文字 ->doEndTag()->执行接下来的网页
如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是
doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页
下面這個程式簡單的示範如何使用自訂標籤來對網頁內容作一些保護:
GuardTag.java
package onlyfun.caterpillar;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class GuardTag extends TagSupport {
public int doStartTag() throws JspException {
String valid =
pageContext.getRequest().getParameter("valid");
// 如果flag設定為key,就顯示本體文字內容
if(valid.equals("valid_user")) {
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
}
同樣的,程式編譯完之後,放置在WEB-INF/classes/之下,然後編譯.tld檔案,如下:
guardtag.tld
<?xml version="1.0" encoding="UTF-8" ?>
<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>Tag Demo</description>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>TagDemo</short-name>
<uri>/TagDemo</uri>
<tag>
<description>Cuard BodyText</description>
<name>guard</name>
<tag-class>onlyfun.caterpillar.GuardTag</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
在<body-content>中設定的是JSP,這表示如果本體中包括JSP網頁的內容,將會被編譯執行,接下來您可以在web.xml中定義uri與.tld的名稱對應關係,方法與前一個主題相同,這邊就不重複說明了,然後撰寫一個測試的JSP網頁:
test.jsp
<%@taglib prefix="caterpillar"
uri="http://caterpillar.onlyfun.net/"%>
<html>
<body>
這個網頁包括受保護的內容OOOXXXX。。。。。。<p>
<caterpillar:guard>
${ param.user }, 您好,幸運密碼是 oooxxx !
</caterpillar:guard>
</body>
</html>
為了要能看到幸運密碼,您必須在請求中包括guard參數,假設請求是:
http://localhost:8080/myjsp/test.jsp?valid=valid_user&user=Justin
這樣就可以看到幸運密碼了:
<html>
<body>
這個網頁包括受包護的內容OOOXXXX。。。。。。<p>
Justin, 您好,幸運密碼是: oooxxx !
</body>
</html>
分享到:
相关推荐
JSP自定义分页标签 extends TagSupport 多种分页风格无需额外资源,使用简单易懂:WebRoot/WEB-INF/tms-tags.tld 文件路径
TagSupport类是Java Servlet JSP API提供的一种基础框架,用于帮助开发者构建自定义JSP标签。本文将详细讲解如何利用TagSupport创建自定义标签来实现网页左侧菜单的功能。 1. **理解TagSupport**: TagSupport是...
本篇将深入探讨`TagSupport`和`SimpleTagSupport`这两个关键类,以及它们在`javax.servlet.jsp.tagext`包中的作用。 `TagSupport`是JSP标准标签库(JSTL)的一部分,它是所有自定义标签的基础类。这个类提供了一组...
- `javax.servlet.jsp.tagext.TagSupport`: 标签库中的自定义标签的基础类,提供了与JSP页面交互的方法。 - `javax.servlet.jsp.HttpJspPage`: 扩展了JspPage接口,添加了对HTTP特性的支持。 4. **如何引入javax....
import javax.servlet.jsp.tagext.TagSupport; 所导致的无包报错解决jar包 注意导入jar包时应注意Servlet的版本,如果是Servlet 2.4 对应的应该是JSP 2.0 的jar包,如果是Servlet 2.5对应的则是JSP 2.1的jar包
本篇文章将深入探讨JSP自定义标签的实现机制,以及`TagSupport`类在其中的作用。 ### 1. JSP自定义标签概述 JSP自定义标签提供了与HTML标签类似的语法结构,但其内部逻辑由Java代码控制。通过自定义标签,开发者...
4. 标签处理类(Tag Handle Class):处理类是Java类,通常继承自TagSupport或实现了SimpleTag接口,负责实现自定义标签的功能。 二、自定义JSP标签的格式: 1. 使用自定义标签需要指定标签库的前缀(Prefix),前缀...
4. **标签处理类(Tag Handle Class)**:标签处理类是实现了自定义JSP标签功能的Java类,通常继承自`TagSupport`或实现`SimpleTag`接口。 **二、自定义JSP标签的格式** 1. **标签库指令的前缀**:前缀用于标识...
- **扩展TagSupport**:处理标签的类需要继承`javax.servlet.jsp.TagSupport`。 - **主要属性**: - `parent`属性:表示当前标签的父标签处理类。 - `pageContext`属性:提供对PageContext对象的访问,可以...
1. **扩展TagSupport**:处理标签的类需要继承`javax.servlet.jsp.TagSupport`,以获得对`pageContext`等资源的访问权限。 2. **主要属性**:`parent`属性存储父标签的处理类,`pageContext`属性提供对`PageContext`...
`12.taglib.doc`讨论的主题是关于如何实现和使用JSP自定义标签库,特别是通过`TagSupport`类进行客户化标签的开发。\n\n### JSP标签库的作用\n\nJSP标签库允许开发者定义一套自定义的行为,这些行为可以被多个JSP...
4. **标签处理类(Tag Handle Class)**:处理类是Java类,继承自`TagSupport`或实现了`SimpleTag`接口,负责实现自定义标签的具体业务逻辑。 **二、自定义JSP标签的格式** - 自定义标签的使用需要两个条件:指定...
知识点:Dostart 方法是 TagSupport 标签的生命周期方法之一,决定了 TagSupport 标签的可见性。EVAL_BODY_INCLUDE 是 Dostart 方法的返回值之一,表示 TagSupport 标签是可见的。 3. JavaBean 是一种特殊的 Java ...
在这个例子中,我们创建了一个名为 `helloTag` 的 Java 类,它继承了 `TagSupport` 类。`TagSupport` 是 JSP 标签库 API 提供的基础类,提供了标签生命周期中的关键方法。在这个类中,我们重写了 `doStartTag()` 和...
1. **接口实现**:自定义标签通常需要实现`javax.servlet.jsp.tagext.Tag`接口或继承`javax.servlet.jsp.tagext.TagSupport`类。`TagSupport`是`Tag`接口的一个默认实现,提供了一些基本的功能。例如,在上面的例子...
自定义标签类是实现自定义功能的核心,它们通常需要继承`javax.servlet.jsp.tagext.SimpleTagSupport`或`TagSupport`基类。`SimpleTagSupport`适用于不关心标签生命周期的简单标签,而`TagSupport`则适用于需要处理...
4. **标签处理类(Tag Handler Class)**:标签处理类是一个Java类,继承自`javax.servlet.jsp.tagext.TagSupport`或者`javax.servlet.jsp.tagext.SimpleTag`等基类,通过实现特定的方法来定义JSP标签的行为。...
首先,我们需要创建一个继承自`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`的Java类。如果你的标签只需要在开始和结束标签之间执行一次操作,那么继承`TagSupport`;如果只...
为了简化开发,JSP提供了一个基类 `javax.servlet.jsp.tagext.TagSupport`,它实现了Tag接口并提供了一些默认实现。开发者通常会继承这个类来创建自定义标签,这样就不必从头实现所有Tag接口的方法。 ### 四、...