JSP基础与案例开发详解:第7章 自定义JSP标签_第1页
JSP基础与案例开发详解:第7章 自定义JSP标签_第2页
JSP基础与案例开发详解:第7章 自定义JSP标签_第3页
JSP基础与案例开发详解:第7章 自定义JSP标签_第4页
JSP基础与案例开发详解:第7章 自定义JSP标签_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1第7章 自定义JSP标签学前提示本章的目的是让读者了解如何实现自己需要的自定义标签。知识要点自定义标签的开发步骤JSP标签API标签处理类标签描述符文件开发自定义标签开发标签库函数打包自定义标签库嵌套标签的开发动态属性的使用使用JSP新增的标签文件开发自定义标签实用数据分页标签27.1自定义JSP标签概述自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率。37.1.1自定义JSP标签的执行过程当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时,JSP引擎遇到自定义的标签,会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。其执行过程如图7.1所示。47.1.2自定义JSP标签的开发流程使用Java处理类来开发自定义JSP标签时,主要分为下几个步骤。(1) 创建标签的处理类(TagHandleClass)。(2) 创建标签库描述文件(TagLibraryDescriptorFile)。(3) 在web.xml文件中声明TLD的位置。(4) 在JSP文件中用taglib指令引入标签库,然后使用标签库描述文件中指定的标签名来使用它。57.2JSP标签API要使用Java处理类来完成自定义标签的功能,就需要使用JSP的标签扩展机制,即继承或实现一组JSP标签API提供的类或接口。这组类和接口放置在javax.servlet.jsp.tagext包中,大致可以分成两组,如图7.2所示。67.3标签库描述符标签库描述符文件是一个以“.tld”结尾的标准XML文档,用来记录一个标签库内拥有哪些标签、每个标签包含哪些属性。取得这些信息后,JSP容器才能正确处理并运行JSP所包含的自定义标签。在不同的JSP规范版本中,这个文档的格式会有少许差异,但JSP2.0规范中的标签库描述文件兼容1.1规范和1.2规范中的标签库描述文件。以下是一个JSP2.0规范的标签库描述文件的内容:参见教材P21677.4传统标签的开发在开发传统标签之前,需要了解清楚两个支持类(TagSupport和BodyTagSupport)的生命周期。87.4.1TagSupport类的生命周期TagSupport类的生命周期可以用图7.3来表示。97.4.2BodyTagSupport类的生命周期TagSupport类的生命周期可以用图7.4来表示。 107.4.3用TagSupport类开发自定义标签1.创建一个标签处理类LoopTag.java2.创建一个标签描述文件mytag.tld并描述这个标签的属性3.在web.xml文件中声明TLD的位置4.在页面中引用标签描述文件并使用这个标签117.4.4用BodyTagSupport类开发自定义标签1.创建一个标签处理类ToUpperCaseTag.java2.在标签描述文件中添加这个标签的描述3.在页面中引用标签描述文件并使用这个标签127.4.5处理空标签在编写标签处理类时,需要注意一下空标签的问题。如果在JSP页面中使用了如下形式的自定义标签,就认为在使用一个空标签。由XML简写空元素的表示法:<prefix:myTag/>。由开始标记和结束标记以及一个空主体表示法:<prefix:myTag></prefix:myTag>。对于自定义的空标签,若其标签处理类实现了Tag或IterationTag接口,那么它的doAfterBody()方法就得不到调用。其他不会受任何影响。对于自定义的空标签,若其标签处理类实现了BodyTag接口,容器就不会调用这些方法:setBodyContent()、doInitBody()或doAfterBody()。137.5简单标签的开发JSP2.0规范在JSP1.2规范的基础之上增加了一个SimpleTag接口和它的一个实现类SimpleTagSupport,来简化传统标签的开发方式,这种方式被称为简单标签的开发。不要被它的名字所迷惑:简单标签处理类也可以实现功能复杂的标签,之所以称为“简单”,指的是它相对于传统标签处理器实现任务更简单得多。在进行简单标签方式的自定义标签开发时,标签处理类通常是继承自实现了SimpleTag接口的SimpleTagSupport支持类来实现的。所以,首先需要了解SimpleTagSupport类的生命周期。147.5.1SimpleTagSupport类的生命周期SimpleTagSupport的生命周期各个阶段的具体执行过程如下。(1) 当JSP容器遇到自定义标签时,JSP容器会调用标签处理类的默认构造方法建立一个标签处理类实例。注意必须为每个标签都创建一个新的实例,这很重要。(2) 实例创建后,JSP容器会调用setJspContext()方法,并以一个JspContext实例的形式提供上下文信息。如果是一个嵌套的标签,还将调用setParent()方法。(3) 然后,容器会调用该标签中所定义的每个属性的set方法。这样,标签处理类实例就已经初始化完成了。(4) 接着,就由容器调用setJspBody()方法,将该标签的主体设置为JspFragment实例。如果标签主体是空的,则将null值传递到setJspBody()。JspFragment实例用来代表标签主体片段的引用。(5) 接下来,由容器调用doTag()方法。标签要实现的所有逻辑、循环、主体赋值等都在该方法中发生。(6) 在doTag()方法返回后,标签处理类中所有的变量都是同步的。157.5.2用SimpleTagSupport类开发自定义标签1.创建标签处理类MySimpleTag.java2.在标签库描述文件中添加此标签的声明3.在页面中引用标签描述文件并使用这个标签167.6开发标签库函数现在,我们来用EL函数实现把字符串小写转成大写的功能。首先定义一个叫MyELFunction的类,在这个类中提供一个叫toUpperCase的方法,完成把字符串小写转成大写的功能:参见教材P235之后,必须在标签库描述符文件中对它进行声明。即对7.4.3节中创建的mytag.tld进行修改,代码如下:参见教材P236完成这两个步骤之后,就可以在JSP页面来使用这个EL函数了。例如在el_function.jsp页面中进行调用,具体调用代码如下:参见教材P236这个页面的运行效果如图7.11所示。177.7打包自定义标签库自定义的标签库在Web应用程序中有两种应用:一种是直接添加到Web应用程序结构中,另一种应用是把它打成JAR包,在需要使用的Web应用程序中以第三方类库的形式添加到类路径(classpath)中。把自定义的标签打到一个JAR包中,就是要把标签处理类的字节码和标签库描述文件按照一定的存放方式添加到一个JAR包中。具体做法如下。(1) 把标签处理类字节码和标签库描述文件按如图7.12所示的结构组织。(2) 使用JAR命令来创建JAR文件:jarcvfmytaglib_0.9.jarMETA-INFcom187.8自定义标签的高级特性前面介绍了自定义标签的基本开发,掌握以上内容就可以完成基本自定义标签的开发。下面再介绍一些自定义标签开发的高级特性,读者可以视自己的掌握情况和实际使用需求酌情了解。197.8.1开发嵌套标签在实际项目开发中,有时会需要多个标签的嵌套来共同完成一个任务,这样的标签就存在父子关系。如何让子标签then和else标签知道父标签if的test属性值为true或false。这就需要使用前面内容尚未涉及的Tag接口(或SimpleTag)中定义的两个方法:publicinterfaceTagextendsJspTag{...publicvoidsetParent(Tagt);publicTaggetParent();}在TagSupport类或SimpleTagSupport类中都有一个方法签名为如下所示的静态方法:publicstaticfinalTagfindAncestorWithClass(Tagfrom,Classklass)这个静态方法正是用来为指定from标签处理类查找类型为klass的祖先标签处理类实例的。207.8.1开发嵌套标签三个标签的处理类的源代码。(1) IfTag类的源代码(2) ThenTag类的源代码(3) ElseTag类的源代码下面的代码是这三个标签在标签库描述符文件mytag.tld中的定义:参见教材P241这几个标签的配置跟前面介绍的标签在标签库描述符文件中的配置没什么区别。也就不多介绍了。最后来看看这三个标签在JSP页面中是如何配合使用的。创建一个名为nested_tag.jsp的JSP页面,内容如下:参见教材P242这个页面执行后的效果如图7.13所示。217.8.2使用动态属性1.创建标签处理类2.在标签库描述文件中描述这个标签3.在JSP页面中使用这个标签227.8.3使用标签文件来开发自定义标签1.简单示例2.访问属性值3.处理标签主体4.处理片段属性5.中止页面处理6.打包标签文件237.9实用案例:自定义分页标签标签的使用方式如下:<q:pagerpageNo="当前页号"pageSize="每页要显示的记录数"recordCount="总记录数"url="要跳转的URI"/>通过给这个标签传入当前页号、每页要显示的记录数、总记录数和要跳转的URI,这个标签就可以生成翻页的HTML元素。如图7.18所示是该分页标签的一个使用效果。247.9实用案例:自定义分页标签1.标签处理类2.在标签库描述文件中描述这个标签的信息3.在页面中使用该

温馨提示

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

评论

0/150

提交评论