`

JSP自定义标签1.1

    博客分类:
  • Java
 
阅读更多

首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的),下图大致结构

 

一、TagSupport 

简单标签的开发我们只要实现Tag接口即可,为了简单起见可以直接继承实现了此接口的TagSupport类。

 标签类说明:

 

 

图一



 

图二

图一作为1中的补充: 在doAfterBody()如果返回值是EVAL_BODY_AGAIN那么将重新执行此方法。

 

setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面

对象的pageContext属性
 
setParent()       设置此标签的父标签
 
setAttribute()   将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法
 
doStartTag()      在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回

EVAL_BODY_INCLUDE则将标签体的内容进行输出
 
doEndTag()         在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执

行页面余下部分
 
release()          生命周期结束时调用
 
特别说明:在tomcat4.1之后的版本中默认开启了标签缓冲池(websphere和weblogic并不会这么做),所以执

行完标签后并不会执行release()方法(_jspDestroy()时才释放),也就是说同一个jsp页面自定义标签不管

使用多少次只会存在一个实例,但也并不是每一个标签都会为其创建一个缓冲池,要根据参数来判断,例如


<myTag:UserInfoTag user=”…” />
<myTag:UserInfoTag />
上面例子中由于参数不同就会创建两个标签缓冲池。
 
这个问题可以通过设定tomcat的配置文件加以解决:
在%tomcat%\conf\web.xml加入enablePooling参数,并设置为false(不缓存自定义标签)。
<init-param>
  <param-name>enablePooling</param-name>
  <param-value>false</param-value>
</init-param>
 
清空%tomcat%\conf\目录

 

 

TagSupport类已经为我们实现并扩展了一些方法(比如在上述方法中我们可以直接使用pageContext对象,调用父标签getParent()等),所以一般情况下我们只需重写doStartTag(),doEndTag() 即可

 

TLD文件说明:

<!--版本号-->

<tlib-version>1.0</tlib-version>

<jsp-version></jsp-version>

<short-name></short-name>

<tag>

<!—指定标签名 -->

    <name></name>

<!—指定标签类文件的全路径 -->

    <tag-class></tag-class>

<!--如果不需要标签体则设置empty,反之设定jsp -->

    <body-content>empty</body-content>

<!—设定属性(如果有的话) -->

    <attribute>

<!—指定标签名 -->

       <name></name>

<!—是否是必须,如果非必须没设置则为空 -->

        <required>true</required>

       <rtexprvalue>true</rtexprvalue><!—是否可在属性中使用表达式 -->

    </attribute>

</tag>

二、BodyTagSupport 

 

 如果我们需要在<test>  ….   </test>之间的标签体的头部和尾部加上一些标记或者是其他处理,一般的处

理方法是在doStartTag和doEndTag方法中进行, 但是如果是个迭代标签,标签体的每段内容在循环输出时每

次都需要在头部和尾部加上一些标记,我们使用BodyTagSupport就很方便了,
 
此接口在doStartTag()方法返回值多了一个EVAL_BODY_BUFFERED,它将对主体进行计算,并输出到缓冲区(注

:此处是缓冲区并非直接输出到客户端,需要我们手动(this.bodyContent.getEnclosingWriter().write

(this.bodyContent.getString());)进行输出客户端的调用,否则主体内容不会进行显示)
 
标签类说明: 关于BodyTagSupport接口的说明



 

 BodyTag接口
    接口BodyTag的实现类,它是负责操作主体内容(bodyContent).

定义方法:public void doInitBody();
    public int doAtferBody();
提示,那些在doStartTag()方法之后被调用的方法依赖于doStartTag()方法返回值并且看在JSP页面上是否自定义Action元素,而不是怎样在TLD文件中去申明
    在TLD文件中, 若<body-content>empty</body-content>的话,doStartTag()方法只能返回SKIP_BODY
    body-content有三个可选值:empty , JSP , tagdependent
    若没有设置的话,那么doStartTag()可以返回SKIP_BODY, EVAL_BODY_INCLUDE, or EVAL_BODY_BUFFERED. 
返回值的说明:
    若SKIP_BODY返回的情况下,body不会被evaluated并且doEndTag()被调用;
    若EVAL_BODY_INCLUDE 返回,并且自定义action元素不为空的时候,那么doInitBody(),setBodyContent()不会被调用,而body evaluated并且"通过"当前的out对象,还有当action元素为空的时候,只有doStartTag(),doEndTag();
    当EVAL_BODY_BUFFERED 返回,并且自定义的action元素不为空的时候,setBodyContent(),doInitBody()被调用,body被evaluated,doAfterBody()被调用,直到大于0次迭代后,doEndTag()才被调用,还有当action元素为空的时候,只有doStartTag(),doEndTag();

  • 大小: 59.3 KB
  • 大小: 38.7 KB
  • 大小: 51.6 KB
  • 大小: 68.2 KB
分享到:
评论

相关推荐

    JSP自定义标签学习笔记

    本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...

    JSP自定义标签 eclipse项目

    **JSP自定义标签**是JavaServer Pages (JSP)技术的一个强大特性,它允许开发者创建可重用的、自定义的行为组件,以提高代码的复用性和可维护性。在传统的JSP开发中,我们通常使用内置标签,如`&lt;jsp:include&gt;`或`...

    jsp 自定义标签有实例的DLC

    本DLC(Digital Learning Content,数字学习资源)将深入探讨如何创建和使用JSP自定义标签,并通过实例来帮助理解这一过程。 一、JSP自定义标签基础 1.1 JSP标准标签库(JSTL) 在自定义标签之前,我们需要了解...

    jsp自定义标签库

    在 JSP 规范的1.1 版中增加了自定义标签库。自定义标签库是一种非常优秀的组 技术。通过使用自定义标签库,可以在简单的标签中封装复杂的功能。

    jsp标签1.1

    ### 一、JSP自定义标签概述 自定义标签是JSP的核心特性之一,它允许开发者创建自己的标签库,类似于HTML标签,但具有更强大的功能。这些标签可以封装Java代码,提供更清晰的视图层逻辑,使得开发者能够更好地分离...

    jsp自定义标签开发+TLD文件元素详解+实例

    从JSP 1.1版本开始,开发者就已经能够利用自定义标签,而在JSP 2.0中,进一步引入了`SimpleTag`接口和`SimpleTagSupport`类,提供了更简洁的标签实现方式。 自定义标签的开发通常包括以下几个步骤: 1. **创建标签...

    jsp 自定义标签

    ### JSP自定义标签详解 #### 一、引言与作用 JSP(Java Server Pages)自定义标签是JSP 1.1版本后引入的一个重要特性,它允许开发者创建可复用的组件,使JSP页面代码更加清晰、模块化。通过自定义标签,可以封装...

    JSP扩展——自定义标签

    在JavaServer Pages (JSP)技术中,自定义标签是一种扩展JSP功能的重要方式,它允许开发者创建可重用的代码块,以提高代码的可维护性和可读性。自定义标签通过标记库(Tag Library)和标记描述文件(TLD, Tag Library...

    jsp自定义标签

    【JSP自定义标签】是JavaServer Pages (JSP) 技术中的一种高级特性,它允许开发者创建自己的标签库,以实现复用性强、可维护性高的代码。这一特性在JSP 1.1版本之后被引入,极大地提升了开发效率。 ### 1. 案例分析...

    自定义标签

    自定义标签是JSP(JavaServer Pages)技术中非常重要的一个概念,它允许开发者通过简化的方式来编写可复用的代码段,从而增强JSP页面的可读性和可维护性。本篇文章将深入讲解自定义标签的使用、实现原理以及开发过程...

    公司内部自定义标签的使用

    JSP自定义标签通常由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD, Tag Library Descriptor)。标签处理类实现了自定义逻辑,而TLD文件则定义了标签的属性、行为以及与处理类的关联。在公司内部,...

    Struts2自定义标签

    自定义标签本质上是一种封装了特定逻辑的JSP标签,它可以被重用,使得JSP页面的代码更加简洁、可读性更强。通过自定义标签,开发者可以将复杂的业务逻辑封装起来,避免在多个页面中重复编写相同的代码,同时也可以使...

    JSP动态网页设计:第10章 自定义标签.ppt

    【自定义标签】是JSP 1.1版本引入的关键特性,允许开发者创建自己的标签库,将业务逻辑封装到Java类中,然后在JSP页面上以标签的形式使用,提高代码可读性和可维护性。这符合了Java的组件复用原则。 **自定义标签...

    jsp1.1语法卡片.rar_卡片

    9. **自定义标签**:JSP 1.1支持创建和使用自定义标签库,增强了代码的可复用性和模块化。 10. **Servlet与JSP的关系**:JSP最终会被编译为Servlet,二者在底层执行机制上有紧密联系。 这些知识点是JSP 1.1开发中...

    jsp 自定义标签实例

    DOCTYPE taglib PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN” “http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd”&gt; &lt;taglib&gt; &lt;tlibversion&gt;1.0&lt;/tlibversion&gt; &lt;jspv

    jsp1.1语法卡片

    - ****:引入自定义标签库,方便使用自定义标签。 6. **JSP表达式语言(EL)** - JSP 1.1开始引入了简单的EL,允许在页面上直接使用变量和表达式,简化了页面与Java Bean之间的数据交互。 通过深入理解和掌握JSP...

    自定义标签模式 输出动态时间

    1.需要用到的类 TimeTage....&lt;tlib-version&gt;1.1 &lt;short-name&gt;TimeTag &lt;uri&gt;http://www.TimeTag.com&lt;/uri&gt; &lt;name&gt;out &lt;tag-class&gt;tag.TimeTag &lt;body-content&gt;empty 3.index.jsp中需要调用 &lt;TimeOut:out/&gt;

    Tema 2b - Etiquetas Personalizadas JSP (JSP Custom…….ppt

    在JSP 1.1及更高版本中,为了进一步提高代码的可维护性和重用性,引入了自定义标签(Custom Tags)的概念,这是对标准JSP动作标签(如jsp:useBean、jsp:getProperty和jsp:setProperty)的一个补充。 自定义标签可以...

Global site tag (gtag.js) - Google Analytics