`
bjtdeyx
  • 浏览: 169702 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

TagSupport doStartTag doEndTag 学习

阅读更多
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创建自定义标签实现网页左侧菜单

    通过继承这个类,我们可以覆盖其中的方法,实现标签的生命周期方法,如doStartTag()、doEndTag()等,以及添加自定义属性。 2. **创建自定义标签类**: 首先,我们需要创建一个新的Java类,例如名为`LeftMenuTag`,并...

    Struts2分页-自定义标签-类似百度分页

    这通常涉及到`TagSupport.doStartTag()`和`TagSupport.doEndTag()`方法。 在描述中提到的博客链接(https://wxb-j2ee.iteye.com/blog/916350)可能会提供更具体的实现细节和示例代码,你可以参考这个链接来深入学习...

    jsp自定义标签中的困扰

    `BodyTagSupport`是JSP API提供的一种用于处理包含内容(body)的标签的支持类,它是`TagSupport`的子类。 1. **doStartTag()**:这是自定义标签生命周期的第一个方法,当遇到标签开始标记时调用。通常在这里进行...

    javax.servlet.jsp.tagext源码

    1. `doStartTag()`: 这个方法在标签开始时被调用,通常用于设置标签的属性或初始化变量。 2. `doEndTag()`: 当标签结束时,此方法会被调用,用于执行标签的主要逻辑。 3. `release()`: 在标签处理完成后,此方法被...

    JSP自定义标签详解

    3. 在标签处理类中,pageContext和parent由JSP容器在调用doStartTag或doEndTag之前设置。 六、TagSupport处理标签的方法: 1. TagSupport提供了两个主要方法: - doStartTag():在标签开始处执行,返回一个整数值...

    学习jsp自定义标签

    3. `setPageContext`和`setParent`方法在调用`doStartTag`和`doEndTag`之前被JSP容器调用,以初始化`pageContext`和`parent`。 4. 构造函数中无法访问`pageContext`,因为它尚未初始化。 **六、TagSupport处理标签...

    由浅到深详细讲解JSP自定义标签

    - `setPageContext`和`setParent`方法:在调用`doStartTag`和`doEndTag`之前,由容器调用来初始化`pageContext`和`parent`。 - `doStartTag`和`doEndTag`方法:主要的标签处理逻辑,分别在标签开始和结束时调用。 ...

    自定义标签学习笔记

    ### 自定义标签学习笔记 #### 一、什么是自定义标签? 自定义标签是JSP(Java Server Pages)中的一种功能,允许开发者创建可重用的组件。这些组件封装了特定的功能,可以在不同的JSP页面中复用,从而提高开发效率...

    Jsp 自定义标签 分页TagSuport

    本篇文章将深入探讨JSP自定义标签的实现机制,以及`TagSupport`类在其中的作用。 ### 1. JSP自定义标签概述 JSP自定义标签提供了与HTML标签类似的语法结构,但其内部逻辑由Java代码控制。通过自定义标签,开发者...

    自定义标签

    实现自定义标签的第一步是创建一个Java类,该类需要继承自TagSupport类,并重写doStartTag()或doEndTag()方法。在doStartTag()方法中,我们通常放置初始化代码和输出内容到页面的代码。而doEndTag()方法则用于在标签...

    JSP自定义标签

    3. `setPageContext`和`setParent`方法在调用`doStartTag`和`doEndTag`之前由容器调用,确保了对`pageContext`和父标签的正确初始化。 4. 构造函数中无法访问`pageContext`,因为它尚未初始化。 **六、TagSupport...

    自定义JSP标签实用.pdf

    3. **方法调用**:在调用`doStartTag`和`doEndTag`之前,JSP容器会先调用`setPageContext`和`setParent`方法。 **六、TagSupport处理标签的方法** 1. **doStartTag**:处理标签开始的生命周期方法,返回值决定是否...

    jsp 自定义标签

    处理类通常需要继承`javax.servlet.jsp.TagSupport`或`javax.servlet.jsp.BodyTagSupport`类,并实现`doStartTag()`和`doEndTag()`等方法,以响应标签的开始和结束事件。 2. **创建标签库描述文件(TLD)**:TLD...

    jsp自定义标签学习

    【jsp自定义标签学习】 JSP自定义标签是JavaServer Pages(JSP)技术中的一种扩展机制,允许开发者创建自己的可重用的组件,这些组件可以像HTML标签一样在JSP页面中使用,增强了页面的可读性和复用性。下面我们将...

    jsp中自定义Taglib详解

    `SimpleTagSupport`适用于不关心标签生命周期的简单标签,而`TagSupport`则适用于需要处理标签生命周期的方法,如`doStartTag()`和`doEndTag()`。在示例中,我们创建了一个名为`HelloWorldTag`的类,它继承了`...

    学习jsp自下定义标签.pdf

    在这个类中,你需要覆盖`doStartTag()`和`doEndTag()`方法,这两个方法分别在标签开始和结束时被调用。在`doStartTag()`中,你可以写入需要在JSP页面中显示的内容,例如红色的"hello!"。在这里,使用`JspWriter`对象...

    JSP自定义标签学习笔记

    对于带有标记体的标签,需要继承`javax.servlet.jsp.tagext.BodyTagSupport`,并在处理类中使用`doStartTag()`、`doAfterBody()`和`doEndTag()`方法来处理标签体内容。 5.3 一个简单的带标记体的标签(二) 在实际...

    Java自定义标签 教程

    它定义了如`doStartTag()`和`doEndTag()`等方法。 3. `SimpleTag`:JSP2.0引入的简化版标签接口,用于简化开发过程。它的处理类需实现`SimpleTag`接口。 4. 还有一些其他接口,如`TagSupport`, `BodyTagSupport`等,...

    12.taglib.doc

    **定义标签处理类**:创建一个类,继承自`javax.servlet.jsp.tagext.TagSupport`,并实现必要的方法,例如`doStartTag()`和`doEndTag()`。在这个例子中,我们创建了一个名为`MyTag`的类。\n\n```java public class ...

Global site tag (gtag.js) - Google Analytics