`

tagSupport和bodytagsupport 的区别

阅读更多
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="" TARGET="_blank">http://caterpillar.onlyfun.net/"%>

<html>

<body>

     這個網頁包括受保護的內容OOOXXXX。。。。。。<p>

     <caterpillar:guard>

         ${ param.user }, 您好,幸運密碼是 oooxxx !

     </caterpillar:guard>

</body>

</html>


為了要能看到幸運密碼,您必須在請求中包括guard參數,假設請求是:
http://localhost:8080/myjsp/test.j ... _user&user=Justin


這樣就可以看到幸運密碼了:
<html>

<body>

     這個網頁包括受包護的內容OOOXXXX。。。。。。<p>

  

         Justin, 您好,幸運密碼是: oooxxx !

  

</body>
</html>
分享到:
评论

相关推荐

    利用BodyTagSupport创建带标签体的自定义标签

    2. **实现标签类**:接下来,创建一个实现`MyTag`接口和`BodyTagSupport`类的类。在这个类中,你需要覆盖`doStartTag()`和`doEndTag()`方法,以及可能需要的其他方法,如`release()`来清理资源。例如: ```java ...

    javax.servlet.jsp.tagext源码

    本篇将深入探讨`TagSupport`和`SimpleTagSupport`这两个关键类,以及它们在`javax.servlet.jsp.tagext`包中的作用。 `TagSupport`是JSP标准标签库(JSTL)的一部分,它是所有自定义标签的基础类。这个类提供了一组...

    JSP+Servlet面试题

    * 自定义标签要继承 TagSupport 或者 BodyTagSupport 类。 * TagSupport 类适用于没有主体的标签,而 BodyTagSupport 类适用于有主体的标签。 * 如果选择继承 TagSupport,可以实现 doStartTag 和 doEndTag 两个方法...

    jsp面试题及答案

    这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承...

    JSP自定义标签.ppt

    JSP 1.2提供了TagSupport、BodyTagSupport,而JSP 2.0引入了SimpleTagSupport。BodyTagSupport同时实现了BodyTag、Tag和IterationTag接口。每个接口都有一系列的方法,例如: - `doStartTag()`:处理标签开始。 - `...

    jsp自定义标签库问答集锦.

    3. **接口关系说明**:从上图可以看出 JspTag 是所有标签接口的基础,Tag 和 SimpleTag 分别提供了不同的功能,而 TagSupport 和 BodyTagSupport 提供了具体的实现支持。 #### 十一、Tag 实现的关键方法 1. **方法...

    JSP面试题及答案借鉴.pdf

    这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承...

    jsp&js&java实用技术

    【知识点详解】 ...实现一个Tag涉及创建一个继承自TagSupport或BodyTagSupport的Java类,定义属性的setter方法,以及处理doStartTag、doEndTag等生命周期方法。TLD文件用于描述标签的属性、行为和关联的Java类。

    java_自定义标签的使用.docx

    - 创建标签处理程序类,继承TagSupport或BodyTagSupport。 - 实现必要的接口方法,如doStartTag、doEndTag等。 - 编写TLD文件,定义标签的元数据,包括标签名、处理程序类、属性等。 - 在web.xml中声明标签库,...

    创建JSP自定义标签.doc

    在JavaServer Pages ...通过继承`TagSupport`或`BodyTagSupport`,并定义相应的属性和生命周期方法,我们可以轻松地创建自己的自定义标签库。最后,通过`.tld`文件和`&lt;jsp:useBean&gt;`引入到JSP页面中,即可正常使用。

    JAVA_scwcd_認證部份筆記

    首先,你需要编写Tag Handler,这个类需要实现Tag、IterationTag或BodyTag接口,通常会继承TagSupport或BodyTagSupport。然后,创建一个Tag Library Descriptor (TLD)文件,用于描述标签的行为、名称、类路径以及...

    jsp中的代码重用技术

    - JSP 1.1引入了`Tag`和`BodyTag`接口以及`TagSupport`和`BodyTagSupport`支持类。这些接口和类为自定义标签提供了基础框架。 - `TagSupport`和`BodyTagSupport`允许开发者轻松扩展新的功能,同时保持良好的性能。...

    JSP自定义标签基础知识学习

    TagSupport类为标签提供了基础的生命周期方法,如doStartTag和doEndTag,而BodyTagSupport类则扩展了TagSupport,增加了对标签体内内容的处理能力。通过覆盖这些方法,开发者可以实现自定义标签的具体功能。 其次,...

    JSP标签库,ppt

    标签处理器通过`Tag`或`BodyTag`接口来实现,例如`TagSupport`和`BodyTagSupport`为这些接口提供了默认的实现。标签处理器可以访问页面上下文(`pageContext`),处理标签属性和标签体内的内容。 3. **TLD文件(Tag...

    在jsp中使用自定义taglib

    `TagSupport`适用于不包含标签体(即标签内部内容)的简单标签,而`BodyTagSupport`用于包含标签体的标签,它可以访问和处理标签内的内容。 2. **在JSP中使用自定义Taglib的步骤** - **创建Tag类**:编写一个Java...

    JSP-面试题[定义].pdf

    - **实现方式**:创建一个继承自TagSupport或BodyTagSupport的Java类,实现特定业务逻辑,然后在.tld文件中定义标签的属性和行为,最后将.tld文件部署到应用中。 总结,JSP是一种服务器端技术,用于构建动态Web...

    jsp java自定义标签 实现分页 当前位置标签

    首先,自定义标签的实现基于Java的`TagSupport`或`BodyTagSupport`类。`TagSupport`适用于无内容体的简单标签,而`BodyTagSupport`则适用于包含内容体的标签,即标签内部可以包含HTML或其他JSP元素。在这个场景下,...

    清华ITjsp课件6

    - **标签实现类**:这是自定义标签的核心,实现了javax.servlet.jsp.tagext.Tag接口或者其子接口,如TagSupport、BodyTagSupport等。这些类提供了处理标签生命周期的方法,如doStartTag()和doEndTag()。 - **TLD...

    taglib 原理和实现.

    在Java中,有两个主要的抽象类用于创建自定义标签:`TagSupport` 和 `BodyTagSupport`。`TagSupport` 是一个抽象类,它简化了标签开发过程,提供了通用的方法如 `doStartTag()`, `doEndTag()` 等,这些方法在标签...

Global site tag (gtag.js) - Google Analytics