自定义JSP标签概述

来源:互联网 发布:淘宝返利机器人原理 编辑:程序博客网 时间:2024/05/19 18:11
 

自定义JSP标签概述

一、自定义JSP标签的执行过程

当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servelt时,JSP引擎遇到自定义的标签,会把这个自定标签森罗万象成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。

从这个执行过程来看,自定义标签就是把原来编写在JSP页面的Java代码单独封装到一个Java类中,当调用自定义标签时,其实是映射调用相应的“标签处理类”来完成工作。

二、自定义JSP标签的开发流程

使用Java处理类来开发自定义JSP标签时,主要分为以下几个步骤:

(1)       创建标签的处理类(Tag Handle Class)这个类用来定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。标签处理类是一个Java类,这个类只需要继承了JSP标签API中提供的接口或类就可以很简单地实现自定义JSP标签的具体功能。

(2)       创建标签库描述文件(Tag Library Descriptor File)。这个文件是描述标签库的XML文档,它描述了标签库中每个标签的属性详细信息,向JSP引擎提供有关自定义标签的标签处理程序的信息。

(3)       在web.xml文件中声明TLD的位置。

(4)       在JSP文件中用taglib指令引入标签库,然后使用标签库描述文件中指定的标签名来使用它。

例子:<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

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

 <jsp-version>1.2</jsp-version>

 <short-name>csdn</short-name>

 <uri>http://www.csdn.com</uri>

 <tag>

  <name>demo6</name>

  <tag-class>com.hbsi.web.tag.SimpleTageDemo</tag-class>

  <body-content>scriptless</body-content>

 </tag>

</taglib>

 

三、JSP标签API

Javax.servlet.jsp.tagext包

JSP 1.1和1.2规范中常用的接口主要有以下3个。

Tag:此接口定义对于所有标签处理类都需要实现的方法。

IterationTag:此接口扩展了Tag接口,增加了控制重复执行标签主体的方法。

BodyTag:此接口扩展了IterationTag接口,并增加了访问和操作标签主体内容的方法。

JSP API针对这3个接口还提供了两个支持类,即TagSuppor和BodyTagSupport,用来简化自定义标签的开发。

四、标签库描述符

标签库描述符文件是一个以“.tld”结尾的标准XML文档,用来记录一个标签库内拥有哪些标签、第个标签包含哪些属性。

<taglib>元素是标签库描述符的根元素,它包含12个子元素,如

1.         <description>:标签库的一个文本描述。

2.         <tlib-version>:指定标签库的版本。

3.         <short-name>:为标签定义简短的名字,在taglib指令中可作为首选的前缀名使用。

4.         <uri>:定义一个URL,用于唯一地标识些标签库。

5.         <tag>:用于指定自定义标签的相关信息。<tag>元素有12个子元素,这里只对部分元素做介绍,如下:

a)         <description>:为自定义标签提供一个文本描述。

b)        <display-name>:为标签指定一个简短的名字。

c)        <name>:指定标签的名字。

d)        <tag-class>:指定标签处理类的完整路径。

e)         <body-content>:指定标签体的格式。格式有四种:

²        empty:标识标签没有标签体。

²        scriptless:表示标签体可以包含EL表达式和JSP的动作元素,但是不能包含JSP的脚本元素。

²        JSP:表示标签体可以包含JSP代码。

²        tagdependent:表示标签体由标签本身去解析处理。若指定tagdependent,那么在标签体中所写的代码将作为纯文本原封不动地传给处理类,而不是将执行的结果传给标签处理类。

f)<attribute>:该标签用于设置标签的属性。该元素有6个子元素。具体如下:

²        <description>:为属性提供一个文本描述

²        <name>:指定属性的名字

²        <required>:指定该属性是否必须。默认为false

²        <rtexprvaalue>:指定属性值是否可以在JSP运行时期动态产生

²        <type>:指定属性的类型

²        <fragment>:指定属性是否为JspFragment对象,默认false

g)<example>:用于提供一个使用该标签例子的信息描述。

h)<variable>:定义标签处理类提供给JSP页面使用的脚本变量。

i)<dynamic-attributes>:指定标签是否支持动态属性,取值是否支持动态属性,取值为true或者false。

j)<icon>、<tag-extension>、<tei-class>

6、<display-name>:为标签库指定一个简短的别名。

7、<small-icon>:为标签库指定大小为16x16的小图标(gif或jpeg格式),该图标可在图形界面工具中显示。

8、<large-icon>:为标签库指定大小为32x32的小图标(gif或jpeg格式),该图标可在图形界面工具中显示。

9、<validator>:为标签库提供一个验证器。

10、<listener>:为标签库提供一个监听器。

11、<tag-file>:用于描述标签文件。

12、<function>:用于指定在表达式语言中使用的函数。

原创粉丝点击