`

JSP页面中的自定义标签

阅读更多

声明标签库

 

通过在使用任何自定义标签之前,将taglib指令加入页面中声明JSP页面将使用在标签库中定义的标签:

 

<%@ taglib uri="/WEB-INF/tlds/taglibName.tld" prefix="taglibName" %>

 

属性 描述
uri 表示唯一标识标签库描述符(TLD)的URI,在标签库描述符中描述了uri。这个URI可以是直接或者非直接的。
prefix 定义了区分指定标签库所定义的标签与其他标签库提供的标签的前缀。

 

标签库描述符文件名必须有扩展名.tld;TLD文件储存在WAR的WEB-INF目录中,或者在WEB-INF的子目录中;可以直接或者间接引用TLD。

 

下面taglib指令直接引用一个TLD文件名:

 

<%@ taglib uri="/WEB-INF/tlds/taglibName.tld" prefix="taglibName" %>

 

这个taglib指令使用一个短的逻辑名间接引用TLD:

 

<%@ taglib uri="/taglibName.tld" prefix="taglibName" %>

 

在Web应用程序部署描述符中将逻辑名映射到一个绝对位置。要将逻辑名/taglibName.tld映射为绝对位置/WEB-INF/tlds/taglibName.tld,在web.xml中添加元素taglib:

 

<taglib>
	<taglib-uri>/taglibName.tld</taglib-uri>
	<taglib-location>/WEB-INF/tlds/taglibName.tld</taglib-location>
</taglib>

 

让标签库实现可用

 

可以以两种方式让标签库实现对Web应用程序可用。实现了标签handler的类可以以非打包的形式储存在Web应用程序的WEB-INF/classes子目录中。另一种方法是,如果以JAR的形式发布库,就将它储存在Web应用程序的WEB-INF/lib目录中。在多个应用程序中共享的标签库储存在Java WSDP的<JWSDP_HOME>/common/lib目录中。

 

定义标签

 

要定义标签,需要:

·为该标签开发一个tag handler和helper类
·在标签库描述符中声明这个标签

 

本节描述标签handler和TLD的属性,并解释如何为在前面几节中介绍的标签开发tag handler和库描述符元素。

 

标签handler

 

标签handler是由Web容器调用的一个对象,用于执行带有自定义标签的JSP页面时对这个标签进行判断。标签handler必须实现Tag或者BodyTag接口。接口可以用于接受现有Java对象并使它成为标签handler。对于新创建的处理器,可以用TagSupport和BodyTagSupport类作为基类。这些类和接口包含在javax.servlet.jsp.tagext包中。

 

JSP页面的servlet在对标签处理的不同阶段调用由Tag和BodyTag接口定义的标签handler。遇到自定义标签的开始标签时,JSP页面的servlet调用方法以初始化相应的handler,然后调用handler的doStartTag方法。遇到自定义标签的结束标签时,调用处理器的doEndTag方法。在标签handler需要与标签的正文交互时调用其他方法,见带正文的标签。为了提供标签handler的实现,必须实现在处理标签的不同阶段调用的方法。

 

标签handler类型 方法
简单 doStartTag, doEndTag, release
属性 doStartTag, doEndTag, set/getAttribute1...N, release
正文、判断且无交互 doStartTag, doEndTag, release
正文、迭代判断 doStartTag, doAfterBody, doEndTag, release
正文、交互 doStartTag, doEndTag, release, doInitBody, doAfterBody, release

 

标签handler可以使用一个能让它得以与JSP页面通信的API。到API的入口点是页面上下文对象(javax.servlet.jsp.PageContext),通过它标签handler可以获取JSP页面能够访问的所有其他隐式对象(请求、会话和应用程序)。

 

隐式对象可以有与其相关联的命名属性。可以用[set|get]Attribute方法访问这种属性。

如果标签是嵌入的,标签handler还可以访问与外围标签关联的handler称为parent。

一组相关的标签handler类(标签库)一般是打包的且作为JAR文档部署。

 

标签库描述符

 

标签库描述符(TLD)是一个描述标签库的XML文档。TLD包含有关整个库以及库中包含的每一个标签的信息。Web容器用TLD验证标签,JSP页面开发工具也使用TLD。

TLD文件名必须有扩展名.tld。TLD文件也储存在WAR文件的WEB-INF目录中或者在WEB-INF的子目录中。
TLD必须以指定XML的版本和文档类型定义(DTD)的XML文档序言(prolog)开始。

 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

 

Tomcat支持版本 1.1和1.2的DTD。不过,本章所讨论的是1.2版本,因为在开发的所有标签库中都应该使用最新的版本。模板库TLDtutorial-template.tld符合版本1.2。Struts库TLD符合版本1.1的DTD,它的元素要少,且其中一些元素使用了稍微不同的名字。

 

TLD的根是taglib元素。

 

taglib子元素

 

元素 说明
tlib-version 标签库的版本
jsp-version 这个标签库要求的JSP规范版本
short-name JSP页面编写工具可以用来创建助记名的可选名字
uri 唯一标识该标签库的的URI
display-name 将由工具显示的可选名
small-icon 将由工具使用的可选小图标
large-icon 可被工具使用的可选大图标
description 可选的标签特定信息
listener 见listener元素
tag 见tag元素

 

listener元素

 

标签库可以指定一些事件监听器类(见处理Servlet生命周期事件)。这些监听器在TLD中作为listener元素列出,Web容器将初始化监听器类并以类似在WAR级定义的监听器的方式注册它们。与WAR级监听器不同,这里没有指定标签库监听器注册的顺序。listener元素的唯一子元素是listener-class元素,它必须包含监听类的完全限定名。

 

tag元素

 

库中的每一个标签都由给出其名字和其标签handler的类、在由标签创建的脚本变量上的信息以及标签属性上的信息描述。脚本变量信息可以在TLD中直接给出,也可以通过tag extra info类给出(见定义脚本变量的标签)。每一个属性声明包含指明属性是否是必需的、其值是否可以由请求时表达式确定以及属性类型的内容(见属性元素)。

 

在tag元素中的TLD中指定标签。

 

元素 说明
name 唯一标签名
tag-class 标签handler类的完全限定名
tei-class javax.servlet.jsp.tagext.TagExtraInfo的可选子类。见提供有关脚本变量的信息
body-content 正文内容类型。见body-conten元素和 body-content元素
display-name 由工具显示的可选名
small-icon 可以由工具使用的小图标
large-icon 可以由工具使用的大图标
description 可选的标签特定的信息
variable 可选的脚本变量信息。见提供有关脚本变量的信息
attribute 标签属性信息。见Attribute 元素

 

返回值列表

 

名称 描述
EVAL_BODY_INCLUDE 把Body读入存在的输出流中,doStartTag()函数可用
EVAL_PAGE 继续处理页面,doEndTag()函数可用
SKIP_BODY 忽略对Body的处理,doStartTag()和doAfterBody()函数可用
SKIP_PAGE 忽略对余下页面的处理,doEndTag()函数可用
EVAL_BODY_TAG 已经废止,由EVAL_BODY_BUFFERED取代
EVAL_BODY_BUFFERED 申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
EVAL_BODY_AGAIN 请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag的时候是很有用的

 

分享到:
评论

相关推荐

    jsp 自定义标签实例

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;jsp:taglib&gt;`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`&lt;myTag:myTag attribute1="value1" attribute2="value2"&gt;`。 在给定...

    jsp2.0 自定义标签和自定标签函数

    在JSP页面中,通过`指令`引入自定义标签库,并使用`属性...&lt;/tag-name&gt;`的格式调用自定义标签。 **二、自定义标签函数** 自定义标签函数是在JSP 2.0中引入的一种新的特性,它允许开发者像使用EL(Expression ...

    jsp 自定义标签的使用

    1. **分页参数**:在自定义标签中接收总记录数、每页显示条数、当前页码等参数。 2. **计算页数**:根据总记录数和每页显示条数计算总页数。 3. **生成链接**:为每一页生成相应的URL链接,通常包含页码参数。 4....

    Java自定义标签开发.zip

    这包括创建标签处理类、编写TLD文件、在JSP页面中导入标签库以及调用自定义标签。这些教程将帮助你理解自定义标签的生命周期、方法调用顺序以及如何处理标签的属性。 在“更多场景的示例Demo”中,你可以找到各种...

    JSP自定义标签学习笔记

    标签文件是一个JSP片段,包含在自定义标签中,当标签被解析时,它的内容会被插入到JSP页面相应的位置。 二、自定义标签简介 2.1 自定义标签概念 自定义标签是JSP的一种扩展,它允许开发者定义自己的标签库,实现...

    jsp权限控制,jsp自定义标签实现

    使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...

    JSP自定义标签之自动完成框

    自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理类(Tag Handler Class)以及实际的JSP页面中的标签使用。 1. **标签库描述符(TLD)**: TLD是一个XML文件,它定义了自定义标签的元数据,...

    jsp页面自定义标签的实现

    为了提高代码的可维护性和可重用性,我们可以使用自定义标签(Custom Tags),这正是"jsp页面自定义标签的实现"这一主题的核心。自定义标签允许开发者封装复杂的HTML或者Java代码,使其成为易于复用的组件,进而降低...

    JSP自定义标签实例与详细讲解

    四、在JSP页面中使用自定义标签 在JSP页面中引入自定义标签库后,可以通过`&lt;%@ taglib %&gt;`指令来引用TLD文件,然后像使用HTML标签一样使用自定义标签。 五、自定义标签实例 一个简单的HelloWorld自定义标签可能如下...

    jsp页面自定义标签Tag

    **JSP页面自定义标签(Tag)详解** 在Java服务器页面(JSP)技术中,自定义标签(Custom Tag)是提升代码复用性和可维护性的重要手段。它允许开发者创建自己的HTML标签来封装复杂的Java逻辑,使得页面更加清晰、易...

    JSP标签、自定义标签,含有属性

    JSP页面中,自定义标签以`&lt;taglib&gt;`指令引入,并通过自定义的标签名使用。 3. **属性处理**: 标签可以接受属性,这些属性在标签的使用中指定,用于传递参数到标签处理逻辑。属性可以是必需的、可选的,或者有...

    jsp自定义标签例子,能在Tomcat下直接运行

    3. **在JSP页面中使用自定义标签** 在JSP页面中,可以像使用HTML标签一样使用自定义标签,只需在开始和结束位置加上定义好的标签名称,并根据需要传递属性。 4. **部署与运行** 部署自定义标签库通常需要将TLD...

    JSP自定义标签之日期显示

    3. 使用自定义标签:在JSP页面中,我们可以这样使用`&lt;displayDate&gt;`标签: ```jsp ... ${yourDateObject}" format="MM/dd/yyyy" /&gt; ``` 这里,`yourDateObject`是JSP页面中的一个日期对象,`format`属性可以指定...

    JSP标签,自定义标签

    4. 使用自定义标签:现在可以在JSP页面中使用自定义标签了。 ```jsp ``` **三、自定义标签的属性** 自定义标签可以接受属性,这些属性可以在标签处理类中访问。在TLD文件中定义属性,然后在处理类中通过`...

    jsp自定义标签库实现数据列表显示

    `userlist.jsp` 是使用自定义标签展示数据列表的页面,它通过`&lt;taglib&gt;`指令引用自定义标签库,并在页面中使用自定义标签`&lt;user:displayList&gt;`来展示用户列表。在`&lt;user:displayList&gt;`标签中,可以传递参数,如数据...

    jsp中自定义标签的使用

    学习和使用这些源代码,你可以了解如何创建一个自定义标签,包括定义属性、处理标签体、实现业务逻辑以及在JSP页面中使用自定义标签。这对于提升JSP应用的可维护性和扩展性非常有帮助。 实践中,你可以先阅读`my...

    jsp的自定义标签

    3. **使用标签**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入标签库,并使用`&lt;tag-name&gt;`的形式调用自定义标签。 自定义标签的实现有两种方式: - **简单标签(Simple Tag)**:适用于标签处理逻辑相对简单的场景...

    JSP自定义标签:最近在项目中要用到这种技术,所以自己就写一个经典的HelloWorld实例

    5. **使用自定义标签**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,然后就可以像使用HTML标签一样使用自定义标签了。 使用自定义标签的好处主要包括: - **代码分离**:自定义标签能够将业务逻辑与...

    jsp自定义标签报错的问题

    这是因为自定义标签与Web应用程序紧密相关,它们需要部署在服务器环境中,并与JSP页面协同工作。当尝试在Java Project中处理自定义标签时,由于缺少必要的环境和依赖,会导致运行时错误。 异常`Java.lang....

    jsp自定义分页标签

    这些自定义标签可以封装复杂的Java代码,使JSP页面更加清晰,易于理解和维护。自定义标签由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD, Tag Library Descriptor)。 二、创建自定义分页标签 1. *...

Global site tag (gtag.js) - Google Analytics