`

[转]TagSupport与BodyTagSupport的区别

阅读更多
URL:http://dongguoh.iteye.com/blog/100782


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,doAfterBody()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.

  如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:
   doStartTag() ->不显示文字 ->doEndTag()->执行接下来的网页//不显示内容时不运行doAfterBody()

  如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是
   doStartTag()->显示文字->doAfterBody()->doEndTag()->执行下面的网页


display.tld 源码


<xml version="1.0" encoding="gbk" ?>   

  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"    
  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">   
<taglib>   
    <tlibversion>1.0</tlibversion>   
    <jspversion>2.4</jspversion>   
    <shortname>测试程序</shortname>   
    <uri>uri>   
    <info>测试程序</info>   
    <tag>   
        <name>display</name>   
        <tag-class>test.DisplayTag</tag-class>   
           
            
            
    </tag>   
</taglib>


DisplayTag.java
package test;    
   
import java.io.IOException;    
   
import javax.servlet.jsp.JspException;    
import javax.servlet.jsp.JspWriter;    
import javax.servlet.jsp.tagext.TagSupport;    
   
public class DisplayTag extends TagSupport {    
   
    public int doStartTag() throws JspException {    
        System.out.println("*********  doStartTag()........\n");    
   
        return this.EVAL_BODY_INCLUDE;    
   
    }    
   
    public int doAfterBody() throws JspException {    
        System.out.println("*********  doAfterBody()........\n");    
   
        return this.SKIP_BODY;    
    }    
   
    public int doEndTag() throws JspException {    
        System.out.println("*********  doEndTag()........\n");    
        JspWriter out = this.pageContext.getOut();    
   
        try {    
            out.println("Hello !!!!");    
        } catch (IOException e) {    
            e.printStackTrace();    
        }    
        return super.doEndTag();    
    }    
   
}


test.jsp
<%@ page language="java" pageEncoding="utf-8"%>   
<%@ taglib uri="/WEB-INF/display.tld" prefix="test"%>   
   
  
<html>   
  <head>   
    <title>My JSP 'index.jsp' starting pagetitle>   
  </head>   
      
  <body>   
   <test:display >   
        冬国  <br/>   
   </test:display>   
  </body>   
</html>  




注意:这里的汉字 显示在 hello 前面证明啦 它是先执行index.jsp 中标签中的内容后才执行 doEndTag()这个方法的
分享到:
评论

相关推荐

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

    `BodyTagSupport`的`setBodyContent()`方法用于获取标签体内容,而在`doStartTag()`和`doEndTag()`中可以处理这些内容,比如进行格式化、过滤或者与其他业务逻辑结合。 在实际开发中,你可能会根据需求添加更多的...

    javax.servlet.jsp.tagext源码

    与`TagSupport`不同,`SimpleTagSupport`不涉及开始和结束标签的概念,而是通过一个单一的方法`doTag()`来处理整个标签的逻辑。这种方法使得编写标签更加直观,特别是对于那些不需要在开始和结束标签之间进行多次...

    jsp面试题及答案

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

    JSP+Servlet面试题

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

    JSP面试题及答案借鉴.pdf

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

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

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

    JSP自定义标签.ppt

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

    jsp&js&java实用技术

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

    创建JSP自定义标签.doc

    一个自定义标签其实是一个Java类,这个类需要继承自`TagSupport`或`BodyTagSupport`。这两个类由JSP容器提供,它们包含处理JSP页面与自定义标签之间交互所需的方法。选择继承哪个基类取决于标签是否需要处理内部内容...

    JAVA_scwcd_認證部份筆記

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

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

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

    java_自定义标签的使用.docx

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

    在jsp中使用自定义taglib

    Tag是一个Java类,它继承自`TagSupport`或`BodyTagSupport`。这两个基类是JSP容器提供的,它们提供了与JSP页面交互的方法,如数据的输入和输出。开发者只需专注于实现业务逻辑,而无需关心与页面交互的细节。`...

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

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

    清华ITjsp课件6

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

    JSP-面试题[定义].pdf

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

    jsp中的代码重用技术

    - `TagSupport`和`BodyTagSupport`允许开发者轻松扩展新的功能,同时保持良好的性能。 2. **标签库声明和使用** - 在JSP页面中通过`&lt;%@ taglib uri="/WEB-INF/bold.tld" prefix="b" %&gt;`声明标签库,使得标签库...

    JSP标签库,ppt

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

    JSP程序设计考试试题与答案-(1).docx

    在这个问题中,代码使用了 BodyTagSupport 来生成动态内容,并输出了 2 次 "good"。 5. 如果我们的提交方式是 POST,在 HttpServlet 里没有 doPost 方法对应的话,将出现 405 错误。 答案:D 知识点:在 ...

Global site tag (gtag.js) - Google Analytics