转载自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>

TagSupport相关推荐

  1. 自订标签库--TagSupport详解

    1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...

  2. TagSupport使用入门

    Java代码   定义最简单的标签 自定义标签采用Default Adapter模式(缺省适配模式) Java代码 //最简单的标签 public class LangHuaTag extends T ...

  3. TagSupport与BodyTagSupport的区别

    http://liqita.iteye.com/blog/1678363 1. TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是 ...

  4. 【转】自订标签库--TagSupport详解

    1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...

  5. 自定义标签 TagSupport

    本人写的第一个web项目设计权限时,用的就是自定义标签,觉得用自定义标签来设计一个小的web程序权限,非常的简单,虽然有很久没用了,但我觉得有必要记记,万一以后用的着呢! 标签处理 priveTag. ...

  6. TagSupport 源码学习

    java中自定义了一个SiteTag,用来做站点引用 Type Hierarchy 英 [ˈhaɪərɑ:ki] 类层次图如下 自顶向下进行分析 类 TagSupport 标签支持类,自定义Tag需要 ...

  7. TagSupport doStartTag doEndTag

    1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...

  8. 使用TagSupport自定义标签

    doStartTag(),doEndTag() TagSupport的学习 1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是 ...

  9. JSP 传统标签extends TagSupport

    1.控制JSP页面某一部分内容是否执行 public int doStartTag() 返回EVAL_BODY_INCLUDE,执行 返回SKIP_BODY,不执行 2.控制整个JSP页面是否执行 p ...

最新文章

  1. 为绑定的NSArrayController设置默认的排序
  2. (转)如何在一台电脑上开启多个tomcat 和配置让系统识别哪个具体的tomcat
  3. pat 乙级 1056 组合数的和(C++)
  4. 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
  5. opencv画图_c++
  6. 毕昇 JDK:为啥是ARM 上超好用的 JDK
  7. 大数据之-Hadoop之HDFS_hadoop集群中的安全模式_原理---大数据之hadoop工作笔记0074
  8. MongoDB 快速入门实战教程最新版
  9. Linux Mount命令浅解
  10. sqlserver功能选择_即将开课 | SQL Server 开发课程
  11. IJCAI 2022奖项公布:3篇杰出论文,南加大、耶拿大学等机构在列
  12. 电脑基础知识精选(硬件篇)
  13. 小程序底部导航栏动态生成
  14. 串口通信协议---UART
  15. Matlab进行射频TRL校准,如何设计和验证TRL校准件,TRL校准应如何操作?-射频/微波-与非网...
  16. Linux--常用命令--dmesg
  17. 全球及中国虚拟健身软件行业运营潜力与规划动向分析报告2022版
  18. 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版
  19. Word中如何从中间的某一页开始编页码
  20. Minecraft使用Alibaba_Dragonwell11运行1.16.5服务器[官服核心]

热门文章

  1. python之open()和os.open()的区分
  2. 免费无广告的个人版office安装
  3. Windows 下安装CUDA和CUDNN以及验证是否安装成功
  4. Unity 3D 环境特效||Unity 3D 游戏场景设计实例
  5. centos 6.3 安装QQ2012教程
  6. 【读书笔记】拆掉思维的墙
  7. 双线性内插法最近邻内插法-python(详细)
  8. 用SLES库安装MySQL NDB Cluster7
  9. Ubuntu18上安装QSV+FFMPEG环境
  10. 基于socket实现虚拟手柄使用手机控制电脑游戏(上)-电脑服务端