轻松学Java Web开发之用户自定义标签_第1页
轻松学Java Web开发之用户自定义标签_第2页
轻松学Java Web开发之用户自定义标签_第3页
轻松学Java Web开发之用户自定义标签_第4页
轻松学Java Web开发之用户自定义标签_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 用户自定义标签JSP自定义标签是用户定义的JSP语言元素,可以看成是一种通过标签处理器生成基于XML脚本的方法。自定义标签在功能上和逻辑上都与JavaBean类似,都是一组可重用的组件代码。相较于JavaBean,自定义标签可以使Web开发者可以完全从Java编程中脱离开来,专注于页面显示和格式上面去,所以具有广阔的发展前景。本章我们就为大家来讲解有关用户自定义标签的知识。16.1 自定义标签概述在第4章中我们讲解了JavaBean,知道JSP专门提供了3个动作指令来调用JavaBean组件,简化JSP页面的开发和维护。但是,这远远不能满足实际开发的需要。因此,在JSP技术中提供了一种

2、新的封装动态功能的机制,这就是用户自定义标签。26.1.1 自定义标签的构成一个自定义标签一般由JavaBean、标签库描述、标签处理器、web.xml文件配置、标签库声明等元素所构成。它们的作用如图6.1所示。JavaBean、web.xml文件配置比较简单。以下仅对标签库声明、标签库描述和标签处理器进行简要介绍。36.1.2 自定义标签声明我们在第2章中介绍过taglib指令。该指令就是当JSP页面中引用自定义标签时,用来在页面上对自定义标签进行声明的。taglib编译指令的作用主要是定义一个标签库路径及其前缀。taglib指令的语法格式如图6.2所示。注意:无论JSP页面中的自定义标签出

3、现在什么位置,taglib指令都必须出现在页面的前端位置。46.1.3 标签库描述符文件标签库描述符(TLD文件)是一个描述标签库的XML文档。TLD包含有关整个库以及库中包含的每一个标签的信息。它把自定义标签与对应的处理程序关联起来。TLD文件名称必须扩展名为.tld。TLD文件存储在Web模块的WEB-INF目录下或者子目录下,并且一个标签库要对应一个标签库描述文件,而在一个描述文件中可以包含多个自定义标签的声明。标签库描述符文件的根元素是,该元素下包含如表6.1所示的子元素。元素说明元素说明用于设置标签库版本用于设置标签库的可选小图标用于设置标签库要求的JSP规范版本用于设置标签库的可选

4、大图标用于设置该标签库的助记名用于设置标签库的描述信息唯一标识该标签库的URI用于设置标签库的监听器类用于设置标签库显示的可选名用于设置标签库的具体标签56.1.3 标签库描述符文件通过表6.1我们可以看出,元素中大部分子元素都是对标签库的一些基本属性或者显示的名称或图表的设定,并不具备实际意义。真正用来查找标签库中具体标签的是元素。元素也包括子元素,其具体说明如表6.2所示。元素说明元素说明用于设置标签的唯一名称用于设置标签的可选小图标用于设置标签处理器的完全限定名用于设置标签的可选大图标用于设置脚本变量信息的子类名称用于设置标签的描述信息用于设置标签的正文内容类型用于设置标签的脚本变量信息

5、用于设置标签显示的可选名用于设置标签的属性信息66.1.4 标签处理器把自定义标签的主体和属性转变为HTML代码的实际工作,是由标签处理器来完成的。标签处理器也叫标签处理类,它是一个Java类。当JSP容器编译自定义标签时,就会需要使用标签处理器类的实例。标签处理器虽然是一个Java类,但不仅仅是一个普通的Java类,在定义时需要满足特殊的要求。开发的标签处理类必须实现Tag或者BodyTag接口类(它们包为javax.servlet.jsp.tagext)。BodyTag接口是继承了Tag接口的子接口。如果创建的自定义标签不带体式,可以实现Tag接口,但是如果创建的自定义标签带体,则需要实现

6、BodyTag接口。76.1.4 标签处理器Tag接口类中所定义的方法如表6.3所示。BodyTag子接口类又重新定义了两个新方法,如表6.4所示。方法名方法描述setPageContext(PageContext pc)设置当前页面的上下文setParent(Tag t)设置这个标签处理类的父类getParent()获得父类doStartTag()处理这个实例中的开发标签doEndTag()处理这个实例中的结束标签release()由标签处理类引起,来释放状态方法名方法描述setBodyContent(BodyContent b)为体中代码作初始化doInitBody()为标签体中的内容设置

7、属性86.1.4 标签处理器在标签处理器中定义了标签处理方法doStartTag()和doEndTag(),这两个方法分别在标签开始和结束时执行处理和输出动作。这两个方法都要求分别返回一个状态码,通知JSP容器岁自定义标签的处理结果及整个JSP页面的运行状态。状态码一共有四种,具体作用如图6.3所示。96.1.4 标签处理器标签处理器也有其生命周期,其大致可以分为5个阶段,如图6.4所示。106.1.4 标签处理器下面我们就在自定义标签的基本概念描述的基础上,列举一系列的自定义标签开发的实例,来教会读者如何开发各类自定义标签。116.2 简单格式的标签开发简单格式的标签没有属性和体,它必须实现

8、Tag接口中的doStartTag()和doEndTag()方法。当Web容器遇到开始标签时会自动调用doStartTag()方法。由于简单格式的标签没有体,所以这个方法会直接返回一个SKIP_BODY。在遇到结束标签的时候会调用doEndTag()方法。如果还需要页面中的其他部分进行判断,则doEndTag()方法会返回EVAL_PAGE,否则,会返回SKIP_PAGE。126.3 自定义带有属性的标签自定义标签可以有自己的属性。属性一般在开始标记中定义,语法为attr=value。而且对于每个value属性,还需要在这个标签相对应的处理类中定义一个属性的set()和get()方法。136.

9、4 自定义带有体的标签之前我们定义的标签都是不带体的,接下来我们看如何创建一个带体的标签。一个自定义标签可以包含其他自定义标签、脚本变量、HTML标记或其他内容。而且其必须继承javax.servlet.jsp.tagext.BodyTagSupport类,实现其中的doInitBody()和doAfterBody()方法。这两种方法的说明如表6.5所示。方法名方法描述doInitBody()方法用这个方法执行所有依赖于正文内容的初始化,对正文内容进行判断之前调用doAfterBody()方法返回指明是否继续判断体中正文内容的指示,在判断了正文内容之后调用146.5 自定义嵌套标签到目前为止,我们创建的标签都是单个的标签,也是被单独的应用在JSP页面中。而在实际开发中,往往需要通过多个标签来实现特定的功能,这样的标签就存在嵌套关系。存在嵌套关系的标签也可以被称为父子标签,一个父标签可以嵌套多个子标签、HTML和Java片段代码。156.6 小结本章主要讲解了JSP自定义标签的基本开发流程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论