自定义标签库外文翻译资料
2023-06-27 09:40:14
英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料
自定义标签库
在第3章中,我们介绍了JavaServer Pages。介绍集中于JSP的核心概念,并解释了JSP如何补充J2EE Web层中的Servlet;但是,完全忽略了一组非常重要的JSP功能——自定义标签。在第3章中,避免了自定义标签(也称为自定义操作)的主题,以支持JSP的更基本概念。自定义标签的使用不是几页讨论就能完全涵盖的主题。对自定义标签的适当解释很容易写满一章,而对自定义标签使用的全面介绍可以轻松写很多内容。
本章对自定义标签进行了完整的介绍。重点主题是如何构建自定义标签以及自定义标签为何有用。在我们深入研究该技术的可能用例之前,了解这两个主题很重要。能够设计和实现您自己的自定义标签集对于JSP开发人员来说是一项非常宝贵的技能。如第6章所示,这项技能可以应用于许多不同的情况,并将在后面涉及安全性、国际化和多客户端设计的章节中展示。与简单的scriptlet相比,构建自定义标签需要付出更多的努力。如果您要成为一名优秀的JSP开发人员,则需要全面了解JSP自定义标签。本章是这种理解的基础。
我们在本章中讨论以下主题:
bull;为什么应该使用自定义标签。
bull;标签库的基础知识(所有类型)。
bull;当前如何使用自定义标签。
bull;新的JSP2.0自定义标签与旧的自定义标签。
bull;标签库描述符;自定义标签库的web.xml。
bull;简单的JSP2.0定制标签。
bull;JSP2.0.tag文件:类似JSP的自定义标签的创作。
bull;经典自定义标签,JSP2.0之前的版本。
bull;混合新旧自定义标签。
bull;标签脚本变量;通过customtags设置和使用作用域对象。
bull;标签库监听器;通过标签库描述符注册Servlet监听器。
bull;标签库验证;自定义标签使用的编译时检查
这是较长的章节之一;但是,您不应该直接通读整个内容。只有前半章,一直到“简单”标签和.tag文件的讨论,并且最后几个主题,标签库侦听器和标签库验证都是必需的;提供有关经典自定义标签的完整讨论只是为了完整性。如果您只想知道本书后面章节需要什么(即开发新的Web应用程序时可能需要什么),请随意跳过关于JSP2.0之前的自定义标签的讨论,但请注意几乎所有现有的自定义标签库是通过经典的自定义标签实现的。如果您想成为一名消息灵通的JSP开发人员,您肯定会从通读整章中受益。
为什么要自定义标签?
已经谈到了一些关于自定义标签的要点,但有很多很好的理由说明为什么自定义标签会有所帮助。在我们了解如何构建自定义标签之前,了解您为什么要构建自定义标签会很有帮助。总之,以下是主要原因的正式列表:
bull;自定义标签提供了一种将逻辑与内容清晰分离的方法:自定义标签和脚本元素提供相同的功能。JSP自定义标签可以完成所有可以用scriptlet完成的事情。不同之处在于这两种技术的创作方式。Scriptlet直接嵌入带有大量静态标签的代码。自定义标签在类似于HTML的标签后面抽象代码。Scriptlet不是从格式化中抽象出逻辑的好方法。Scriptlet通常混合了数据操作代码和负责呈现数据的代码。这导致JSP过于复杂,甚至需要有能力的Java开发人员来创建它。自定义标签将所有逻辑移动到绑定简单标签的单独Java类中。无需接触JSP即可轻松操作逻辑,并且可以轻松地使用简单的标签来创作内容。
bull;易于使用:自定义标签易于使用。程序员和非程序员都可以直观地使用自定义标签。它们是增强应用程序Web层的理想机制,尤其是在与混合开发人员组协作时。精通HTML且没有Java经验的开发人员可以轻松掌握并成功使用自定义标签库。出于这个原因,自定义标签是将复杂逻辑连接到以HTML或XML等语言编写的简单表示层的好方法。
bull;便携性:自定义标签是可移植的。一套完整的自定义标签可以打包到一个JAR文件中,并部署在许多Web应用程序中。与scriptlet相比,这是一个巨大的优势,无论是在开发代码时还是在使用现有的自定义标签库时。
将自定义标签视为一个用Java或JSP编写的组件,它封装了一些行为。对于页面作者来说,自定义标签看起来像HTML,或者至少是XML。对于标记开发人员,自定义标签可以是Java类或JSP的片段。在所有情况下,语法都非常熟悉,并遵循各自语言的优点。
标签库基础
标签库是自定义标签的集合,通常旨在相互补充并实现共同目标。库中的标签是用Java或JSP片段编写的,并且可以由标签库描述符(TLD)文件描述的JSP使用。大多数自定义标签集都打包为一个JAR文件,可以轻松地与任何Web应用程序一起部署。
将自定义标签视为抽象的scriptlet。与scriptlet类似,标签完全由JSP开发人员或开发工具编写的代码组成。然而,与scriptlet不同的是,代码本身并不直接出现在JSP上。不是直接在JSP中嵌入代码,而是通过TLD抽象地绑定到JSP。图7-1说明了这个概念。
请注意,在图7-1中,抽象代码被称为“标签处理程序”或“标签文件”。标签文件和标签处理程序类都可使自定义标签起作用。标签文件将在本章后面介绍,但可以作为制作标签处理程序的简单方法。标签处理程序是Java类的正式名称,它封装了使自定义标签起作用的代码。
图7-1自定义标签概览
标签处理程序、标签库描述符以及使用它们所涉及的标签是本章的重点。这些主题很好地补充了一章,包含了开始构建JSP自定义标签所需的所有内容。
标签是如何使用的?
自定义标签通常用于JSP的所有动态方面。标签库并不是所有事情的最佳解决方案,但它们是在JSP中嵌入动态功能的首选方法。本章中出现了许多自定义标签的简单说明性用法。不要让这愚弄您认为这是技术的制约。自定义标签有许多实际用途,后面的章节将深入介绍。作为后续章节的预览和背景信息,以下是自定义标签的一些更有用的用途。
MVC
模型视图控制,也称为模型2,是目前开发Web应用程序最常用的设计模式。MVC设计模式很受欢迎,因为它专注于将Web应用程序分解为逻辑分区,并鼓励开发人员遵守这些分区。View分区对应于Web应用程序的一部分,负责将数据呈现为客户端期望的格式。这种划分通常由JSP来完成,JSP可以通过标准JSP操作或自定义操作轻松显示信息。
国际化
国际化是网站开发的一个非常重要的问题。创建多语言网站可能是一项艰巨的任务。通过JSP提供此类功能的一种非常实用的方法是将所有文本生成元素封装为自定义标签。每个标签将负责根据客户端的位置确定要生成的正确文本。这可以按以下方式完成:
lt;%@taglib prefix='in' uri='/WEB-INF/i18n.tld' %gt;
lt;htmlgt;
lt;headgt;
lt;in:title id='groups'/gt;
lt;/headgt;
...
以上是i18n标签库中名为title的自定义标签的示例。标签传递一个ID属性,它通常用作资源包的索引,根据客户端的语言环境提取正确的文本。正是这个提取的文本显示为标签的结果,并显示为页面标题。
国际化标签很受欢迎,因为它们以非常干净的方法解决了i18n问题。国际化章节包括有关国际化问题和使用自定义标签来解决这些问题的更多信息。
多客户端支持
今天的客户类型比过去多得多。例如,Web浏览器具有不同的功能;有些客户希望使用XML,而手持式客户端(例如电话和个人数字助理(PDA))希望他们的数据采用WML格式。一个网站可以支持这么多客户端。这问题与国际化问题非常相似;然而,适当地格式化内容而不是用不同的语言生成相同的内容是一个问题。与国际化问题一样,自定义标签为支持各种类型的内容格式提供了很好的解决方案。以下是如何使用这些标签的示例:
lt;%@taglib prefix='mct'uri='/WEB-INF/mct.tld'%gt;
lt;mct:pagegt;
lt;mct:pgt;Some textlt;/mct:pgt;
lt;/mct:pagegt;
前面是与国际化标签类似的说明,但请注意,两个自定义标签都用于格式化,而不是文本。在这些示例中,自定义标签负责为请求内容的客户端生成适当的格式。对于可能需要根据特定客户端以HTML、XHTML、XML、PDF或WML格式发送相同内容的网站来说,这是一个有用的设计功能。
第13章“多客户机支持”将进一步介绍。
条件、迭代和简单的、必要的任务
很多的案例总是出现在JSP上。这些情况的一些很好的例子是条件和迭代。一个简单的scriptlet和一个简单的自定义标签就足够了,标签总是首选,以用来保持代码的整洁。目前,JSP没有提供一套标准的方案来解决最常见的情况,但是已经有将这些标签集成到标准方案集中的行动。正如您在前一章中所读到的,JavaServerPages标准标签库(JSTL)的当前版本提供了一些这样的简单标签。
无数不合逻辑的方式
尽管有传统观念,并且在作者看来,有无数的自定义标签以不应该的方式被使用。这些标签的存在似乎总是有一个半合理的理由,但却被许多JSP社区所反对。此类标签通常用于将业务逻辑放置到JSP上。作者在整本书中都认为这不是好的做法。由于标签最初是为了避免这种做法而设计的,因此使用标签来执行此操作似乎是有悖常理。为什么这样做?答案通常是易于使用,但就所有实际目的而言,这个借口不是一个好借口。
在最后一章和本章中,都有一些关于这些“坏”标签的清晰例证和评述,以及为什么我们认为你不应该使用它们。本书的目的不是说明不好的做法,但是如果不提出不好的用法,很难清楚地说明在使用之前应该认真考虑哪些类型的自定义标签。此外,无用标签的问题很重要,否则它甚至不会被提及。有许多现有的标签集,甚至是标准化的标签,它们没有或至少应该没有什么实际用途。
新旧自定义标签
JSP 2.0规范最初被命名为JSP 1.3规范,但是引入了足够多的重大更改,因此将新规范升级为JSP 2.0是有意义的。推动标题更改的一些最重要的更改与JSP自定义标签直接相关。在以前的JSP版本中,自定义标签很复杂,只适合Java开发人员。然而,自定义标签的作用如此之大,以至于非Java开发人员抱怨JSP应该扩展其灵活性以使自定义标签易于所有JSP作者使用。此外,JSP长期以来一直受到关注,因为它的许多特性(即自定义标签)可以在HTTP Servlet的上下文之外很好地使用。JSP 2.0引入了解决这些问题的附加功能。
声称JSP 2.0中引入的所有自定义标签功能都是对已经存在的功能的补充,这是不正确的。许多补充是构建自定义标签的一种高级形式。查看JSP 2.0自定义标签的更好方法是将它们分为两类:新的“简单”自定义标签和旧的自定义标签。这两种类型的标签都可以工作并提供相同的功能。两种标签的区别在于新的自定义标签提供了更简单直观的解决方案。所有自定义标签都可以在同一个JSP上以任何组合方式使用。
在本书中,自定义标签的基本功能在本章中已完全涵盖。首先,介绍并解释了构建自定义标签的新方法。我们强烈建议您使用新的简单方法;但是,也涵盖了实现自定义标签的旧方法。它可以作为可选阅读,但它对理解非常有帮助,因为几乎每个现有的自定义标签都是按照该策略构建的。
标签库描述(TLDs)
决定如何解释自定义标签的任务很困难,因为很难知道从哪里开始。标签处理程序、JSP片段和.tag文件是迄今为止需要解释的自定义标签的最重要方面;但是,在大多数自定义标签能够做任何事情之前,需要TLD文件。出现问题是因为首先尝试解释TLD文件,但是TLD的许多部分在标签处理程序被解释之前是没有意义的。为了解决这个问题,通过本章中出现的许多小部分来解释TLD文件。
本节介绍TLD文件的基础知识,并讨论开始使用简单标签处理程序所需的一切。本章的这一部分并未完全涵盖TLD文件。TLD文件中稍微复杂的部分,例如声明属性和初始参数,将在本章后面的相关部分中介绍。在本章的最后,简要回顾了TLD文件以总结所有内容。
什么是标签库描述?
在抽象意义上,标签库描述是将自定义标签代码绑定到出现在JSP中的简单标签的机制。TLD的具体形式是一个XML文件,通常出现在Web应用程序的/WEB-INF目录中。您还可以将TLD与打包的标签库JAR捆绑在一起,但假设现在所有TLD文件都显示为带有“tld”扩展名的简单XML文件。
对于本章,您将需要一个描述自定义标签示例的TLD文件。现在通过将清单7-1保存为jspbook Web应用程序的/WEB-INF目录中的example.tld来启动该文件。
清单7-1:一个简单的TLD文件
lt;taglib
xmlns='http://java.sun.com/xml/ns/j2ee'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd'
version='2.0'gt;
lt;tlib-versiongt;1.0lt;/tlib-versiongt;
lt;jsp-versiongt;2.0lt;/jsp-ve
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[603272],资料为PDF文档或Word文档,PDF文档可免费转换为Word