TagSupport
转载自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相关推荐
- 自订标签库--TagSupport详解
1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...
- TagSupport使用入门
Java代码 定义最简单的标签 自定义标签采用Default Adapter模式(缺省适配模式) Java代码 //最简单的标签 public class LangHuaTag extends T ...
- TagSupport与BodyTagSupport的区别
http://liqita.iteye.com/blog/1678363 1. TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是 ...
- 【转】自订标签库--TagSupport详解
1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...
- 自定义标签 TagSupport
本人写的第一个web项目设计权限时,用的就是自定义标签,觉得用自定义标签来设计一个小的web程序权限,非常的简单,虽然有很久没用了,但我觉得有必要记记,万一以后用的着呢! 标签处理 priveTag. ...
- TagSupport 源码学习
java中自定义了一个SiteTag,用来做站点引用 Type Hierarchy 英 [ˈhaɪərɑ:ki] 类层次图如下 自顶向下进行分析 类 TagSupport 标签支持类,自定义Tag需要 ...
- TagSupport doStartTag doEndTag
1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否 ...
- 使用TagSupport自定义标签
doStartTag(),doEndTag() TagSupport的学习 1 TagSupport与BodyTagSupport的区别 TagSupport与BodyTagSupport的区别主要是 ...
- JSP 传统标签extends TagSupport
1.控制JSP页面某一部分内容是否执行 public int doStartTag() 返回EVAL_BODY_INCLUDE,执行 返回SKIP_BODY,不执行 2.控制整个JSP页面是否执行 p ...
最新文章
- DPM 2007SRT及DPM 2010 BMR祼金属还原总结
- 2019 IROS—终生机器视觉数据集全球挑战赛
- 在SAP分析云里利用词云技术显示大段文本里的关键词
- 5 计算机组成原理第四章 指令系统
- GaussDB(for MySQL)如何在存储架构设计上做到高可靠、高可用
- Springboot+Mysql健身房在线预约管理系统
- iBatis in 语句参数传入方法
- 【转载】异步调用与多线程的区别
- Android面试题整理
- chrome下载速度慢,提高下载速度
- SQL练习题:变更性别
- 无法加载文件 XXX,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft问题解决
- 手机处理器天梯图出炉:第一实至名归,你手机处理器排第几
- NRF24L01的多对一通信
- 几个PPT字体排版技巧,点进来就能学到新知识
- 如何设置Python环境变量?
- 温暖别人就是温暖自己
- Python枚举是什么-读懂Python枚举的方法
- 【AV1 spec学习一】OBU类型及码流结构
- openGauss理事会筹备会圆满成功