`
啸笑天
  • 浏览: 3466005 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

今天做自定义标签时才发现:EVAL_PAPGE、SKIP_PAGE-----我这个菜鸟啊

阅读更多

继承关系

java.lang.Object

         javax.servlet.jsp.tagext.TagSupport

         javax.servlet.jsp.tagext.BodyTagSupport

 

 

  1. EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用(告诉服务器正文的内容,并把这些内容送入输出流 )   
  2. EVAL_PAGE:继续处理页面,doEndTag()函数可用   (让服务器继续执行页面 
  3. SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用  (告诉服务器不要处理正文内容 )  
  4. SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用   (让服务器不要处理剩余的页面 
  5. EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代   
  6. EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法   ()
标签中静态常量: 
EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 
SKIP_BODY:告诉服务器不要处理正文内容 
EVAL_PAGE:让服务器继续执行页面 
SKIP_PAGE:让服务器不要处理剩余的页面 
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回 
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。


他们执行顺序如下: 
doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() 

doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 
如果返回EVAL_BODY_INCLUDE则继续执行; 
如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行, 
而直接执行doEndTag()方法。 

setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。 
标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, EVAL_PAGE或SKIP_PAGE。 
如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 
如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分; 
如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。 


------------------------------------------------------------------------------------------------------------------------------

非常感谢:http://dongguoh.iteye.com/blog/100782

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()->执行接下来的网页//
不显示内容时不运行doAfterBodyTag()

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

display.tld 源码

xml 代码
  1. xml version="1.0" encoding="gbk" ?>  
  2.   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"   
  3.   "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">  
  4. <taglib>  
  5.     <tlibversion>1.0tlibversion>  
  6.     <jspversion>2.4jspversion>  
  7.     <shortname>测试程序shortname>  
  8.     <uri>uri>  
  9.     <info>测试程序info>  
  10.     <tag>  
  11.         <name>displayname>  
  12.         <tagclass>test.DisplayTagtagclass>  
  13.           
  14.            
  15.            
  16.     tag>  
  17. taglib>  

DisplayTag.java 源码

java 代码
  1. package test;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import javax.servlet.jsp.JspException;   
  6. import javax.servlet.jsp.JspWriter;   
  7. import javax.servlet.jsp.tagext.TagSupport;   
  8.   
  9. public class DisplayTag extends TagSupport {   
  10.   
  11.     public int doStartTag() throws JspException {   
  12.         System.out.println("*********  doStartTag()........\n");   
  13.   
  14.         return this.EVAL_BODY_INCLUDE;   
  15.   
  16.     }   
  17.   
  18.     public int doAfterBody() throws JspException {   
  19.         System.out.println("*********  doAfterBody()........\n");   
  20.   
  21.         return this.SKIP_BODY;   
  22.     }   
  23.   
  24.     public int doEndTag() throws JspException {   
  25.         System.out.println("*********  doEndTag()........\n");   
  26.         JspWriter out = this.pageContext.getOut();   
  27.   
  28.         try {   
  29.             out.println("Hello !!!!");   
  30.         } catch (IOException e) {   
  31.             e.printStackTrace();   
  32.         }   
  33.         return super.doEndTag();   
  34.     }   
  35.   
  36. }   
index.jsp 源码
xml 代码
  1.   
  2. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  3. <%@ taglib uri="/WEB-INF/classes/test/display.tld" prefix="test"%>  
  4.   
  5. >  
  6. <html>  
  7.   <head>  
  8.     <title>My JSP 'index.jsp' starting pagetitle>  
  9.   head>  
  10.      
  11.   <body>  
  12.    <test:display >  
  13.         冬国  <br>  
  14.    test:display>  
  15.   body>  
  16. html>  

效果图

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

 

分享到:
评论
1 楼 xrfinbj 2014-01-11  
想问一下,struts2 在那个地方调用触发BodyTagSupport 类的 doStartTag()这些函数?

相关推荐

    trec_eval_latest.tar

    《TREC评估工具trec_eval最新版本解析》 在信息技术领域,信息检索(Information Retrieval, IR)是一项至关重要的任务,而TREC(Text REtrieval Conference)是推动这一领域发展的重要活动。作为IR评估的标准工具...

    ap算法matlab代码-DARKFACE_eval_tools:DARKFACE_eval_tools

    运行时可能会出现错误 docker pull scaffrey/eval_tools_ap:dry_run docker run --rm -it \ -v /path/to/your/submission:/tools/data \ -v /path/to/save/result:/tools/output \ scaffrey/eval_tools_ap:dry_run ...

    Micrium_STM320518-EVAL_uCOS-II

    《uCOS-II在STM320518-EVAL板上的应用详解》 uCOS-II,全称为μC/OS-II,是一款广泛应用于嵌入式系统的实时操作系统(RTOS)。其设计目标是提供一种高效、可移植、占用资源少的多任务内核,适合于微控制器环境。在...

    TUSBAudio_v3.34.0_eval_Dream_2016-04-28.exe

    TUSBAudio_v3.34.0_eval_Dream DREAM USB-DBG-IF

    JSP自定义标签之日期显示

    在“日期显示”这个场景中,我们可能需要创建一个自定义标签,如`&lt;displayDate&gt;`,它接受一个日期对象作为参数,并根据预设的格式将其转换为字符串显示出来。以下是一个简单的实现步骤: 1. 创建TLD文件:在项目的...

    JSTL自定义标签实例解析

    - `EVAL_PAGE`: 处理标签结束,继续处理页面内容。 - `EVAL_BODY_BUFFERED`: 处理标签体,并保存在内存中。 - `EVAL_BODY_INCLUDE`: 处理标签体,但忽略`setBodyContent()`和`doInitBody()`。 - `EVAL_BODY_...

    license_eval_halcon_progress_2022_03.dat

    license_eval_halcon_progress_2022_03.dat

    stm3210c-eval_fw.zip_STM3210C-EVAL_STM3210C-EVAL board_STM3210C_

    STM3210C-EVAL_FW.zip 包含的是针对STM3210C-EVAL评估板的固件,这是由意法半导体(STMicroelectronics)设计的一款微控制器开发平台,用于测试和开发基于STM3210C系列的嵌入式应用。STM3210C是STM32系列中的一个...

    Python库 | eval_hj3415-0.0.8-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:eval_hj3415-0.0.8-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Micrium_STM3240G-EVAL_OS2.zip

    《深入解析uC/OS在STM3240G-EVAL平台上的应用》 在嵌入式系统开发领域,实时操作系统(RTOS)起着至关重要的作用,它为微控制器提供了多任务处理能力,使得复杂的系统设计变得更为高效和可靠。本文将深入探讨基于...

    自定义标签的内容及使用

    6. 执行`doEndTag()`方法,返回`EVAL_PAGE`或`SKIP_PAGE`决定是否继续执行JSP页面的剩余部分。 7. 最后,调用`release()`方法释放资源。 开发自定义标签的完整步骤包括: 1. 开发标签类,实现所需的接口或继承基类...

    Ruby Meta Programming: define_method or class_eval

    在这个例子中,`define_method`在`MyClass`上定义了一个名为`my_method`的方法,该方法在调用时会打印出"Hello, World!"。 另一方面,`class_eval`接收一个字符串或代码块,并将其作为一个在指定类或模块上下文中...

    Micrium_STM3240G-Eval_uCOS-III

    《Micrium_STM3240G-Eval_uCOS-III:uCOS-III操作系统在STM32F4微控制器上的移植与应用》 在嵌入式系统领域,操作系统的选择与移植对于项目的成功至关重要。本文将深入探讨Micrium公司的uCOS-III实时操作系统在STM...

    STM3210C_EVAL_stm32_STM3210C_EVAL_temperature565_

    标签"stm32 STM3210C_EVAL temperature565"进一步确认了我们之前的分析,即这个项目或软件包与STM32系列的特定型号——STM3210C,以及温度测量相关。此外,"STM3210C_EVAL"标签表明此资源是为STM3210C EVAL评估板...

    java 自定义标签

    5. `doEndTag()`:结束标签处理,可以返回`SKIP_PAGE`或`EVAL_PAGE`。 开发自定义标签的过程包括: 1. 创建标签处理程序(Java类):实现上述接口或继承类,并编写相应的方法实现标签功能。 2. 编写`.tld`文件:...

    Enterprise-Web3.0:适用于Web3.0:trade_mark:的Enterprise:trade_mark:

    npx ETM eval fdcFizzBuzzDelegator.E:trade_mark: 涡轮模式! npx ETM eval fdcFizzBuzzDelegator.E:trade_mark: --turbo 什么 Enterprise:trade_mark:Web3.0:trade_mark:是用于语言的解析器和编译器。 ...

    STM3210C-EVAL.rar_1728389_STM3210C _STM3210C-EVAL_STM3210C-EVAL_

    这个压缩包文件包含了与STM3210C-EVAL相关的详细代码,这些代码已经过测试并被认为能够成功运行,对于初次接触STM32开发的工程师来说,是一个宝贵的资源。 STM32是ST公司推出的基于ARM Cortex-M内核的32位微控制器...

    Micrium_STM3240G-EVAL_OS2

    《深入解析Micrium_STM3240G-EVAL_OS2与UCOSII在STM32F4上的应用》 本文将围绕“Micrium_STM3240G-EVAL_OS2”这一主题,深入探讨其在STM32F4微控制器上采用UCOSII实时操作系统实现的细节和应用。STM32F4系列是意法...

    TMC5160-EVAL_Rev1.00_Hard.zip

    TMC5160-EVAL_Rev1.00_Hard.zip这个压缩包文件是针对TMC5160步进电机驱动器的评估板设计资料,其中包含了TMC5160-EVAL_V31.SCH和TMC5160-EVAL_V31.PCB两个关键文件,分别代表电路原理图和PCB布局设计,这对于理解和...

Global site tag (gtag.js) - Google Analytics