JSP 最佳实践:taglib简介
2004-11-27 09:59
519 查看
JSP 最佳实践:taglib简介 | 英文原文 | ||
作者,O'Reilly and Associates 2003年 9 月 Scriptlet对于快而杂( fast-and-dirty)的编码来说是一种不错的选择,但是从长远来看,您需要为您的JSP页面选择一种不那么杂乱的解决方案。在本期的JSP最佳实践中,Brett McLaughlin 向您展示了如何将scriptlet转化成JSP自定义标记,然后将其用于您的JSP开发中。 在JSP最佳实践的上一期,您学习了一种基于scriptlet的技术,这种技术被用来将上次修改的时间戳添加到JavaServer Page(JSP)文件中。不幸的是,比起它所提供的短期利益,scriptlet会将更多的长期复杂性引入到您的页面中来。这些scriptlet会用Java代码将各种类型的HTML混杂在一起,从而使得 程序的调试和设计极其错综复杂。scriptlet不能重用,这常常导致开发者不得不在JSP页面之间进行复制-粘贴操作,进而导致同一段代码出现多个版本。而且,scriptlet还加大了错误处理的难度,因为JSP没有提供干净利落的方式来报告脚本错误。 因此,这次我们将设计一种新的解决方案。在本期的JSP最佳实践中,您将学习一些基础知识,主要是关于如何将scriptlet转换成自定义标记,并对其进行设置以便在您的JSP开发项目中使用。 为什么使用taglib? 所谓标记库(tag library),是指由在JSP页面中使用的标记所组成的库。JSP容器推出时带有一个小型的、默认的标记库。而自定义标记库是人们为了某种特定的用途或者目的,将一些标记放到一起而形成的一种库。在一个团队中协同工作的开发者们可能会为各自的项目创建一些非常特定化的自定义标记库,同时也会创建一个通用自定义标记库,以供当前使用。 JSP 标记替代了scriptlet,并缓解了由scriptlet所招致的所有令人头痛的事情。例如,您可以看到这样的标记:
从 scriptlet 到标记 创建一个自定义标记的第一步就是决定您想怎样使用它,如何称呼它,以及它允许使用或者需要什么属性(如果有的话)。对于时间戳标记,我们所需要的很简单:只要一个能够输出一个页面的最后修改数据的简单标记。 因为不需要属性,这个标记看上去就是这个样子:
site-utils。元素的内容是空的,这意味着该元素中不允许有子元素存在。定义了这个标记之后,接下来的一步就是实现它的行为。 实现行为 实现标记行为的第一步是将scriptlet代码从原先所在的地方移到一个Java类( LastModifiedTag)中,如清单 1 所示: 清单 1. 创建一个时间戳标记
doEndTag(),在这个方法中该标记可以输出内容(在这个例子中是最后修改数据)到JSP页面。 清单 1 中其他的更改更多地与作为一个JSP标记的代码有关,而与在一个页面内运行的scriptlet没有多大关系。例如,所有的JSP标记都应该扩展JSP类 javax.servlet.jsp.tagext.TagSupport,这个类为JSP标记提供了基本框架。可能您还注意到 ,该标记返回的 EVAL_PAGE. EVAL_PAGE是一个预定义的整型常量,它指示容器处理页面的剩下部分。另一种选项就是使用 SKIP_PAGE,它将中止对页面剩下部分的处理。如果您要将控制转移到另一个页面,例如您要前进(forward)或者重定向(redirect)用户,那么只需要使用 SKIP_PAGE。剩下来的细节都是与时间戳自身有关的事情。 接下来,编译这个类,并将 LastModifiedTag.class 文件放到一个WEB-INF/classes 目录下,注意要放到正确的路径层次结构中。这个路径应该匹配该标记的包名,包名中的圆点(.)用斜杠(/)代替。在本例中,目录的路径是基路径(WEB-INF/classes)再加上层次结构com/newInstance/site/tags。如果有一个名为 foo.bar.tag.MyTag的标记,那么它将被放在 WEB-INF/classes/foo/bar/tag中。这种路径层次结构确保了Web容器在任何需要装载该标记的时候都能够找到这个类。 创建TLD 接下来的一步是创建一个标记库描述符(tag library descriptor ,TLD)文件。TLD向容器和任何要使用该标记库的JSP页面描述您的标记库。清单 2 显示了一个非常标准的TLD,其中只包含了一个标记。当您将更多的标记添加到库中时,TLD文件的长度和复杂性将随之增长。 清单 2. 一个标记库描述符
short-name作为URI的一部分,这样 比较容易将前缀和标记库的URI看成一个整体。 剩下的信息用于一个特定的标记,这些信息用 tag元素表示。我指定了该标记的名称、用于该标记的类(这个类应该被编译好并放在适当的地方,以便容器能够装载),最后还指定了该标记是否有嵌入的内容。在本例中,标记没有嵌入的内容,因此使用"empty"。 保存这个文件,并将其放到WEB-INF/tlds目录下(您可能需要在您的容器中创建这个目录)。我将这个文件保存为site-utils.tld,并在该标记库的URI(推荐的前缀)和TLD文件本身之间再次创建一个干净的链接。对于这个特定的标记库,要使其可以使用,最后一步要做的是让您的Web应用知道如何连接一个JSP页面中的URI,如何请求使用一个标记库。这可以通过应用的web.xml文件来做。清单 3 显示了一个非常简单的web.xml片段,正是 它为我们的标记库做这样的事情。 清单 3. 将一个URI与一个标记库链接起来
如果您已经按照上述步骤执行了,那么现在您应该能够在JSP页面中引用新标记了。清单 4 向我们展示了新改进的footer.jsp,这个文件中现在完全没有scriptlet,也没有指向具有scriptlet的JSP页面的引用。 清单 4. 使用新的标记库
short-name始终是最好的选择),然后就像使用任何其他JSP标记一样使用这个标记。最终得到的是一个简洁的、更好的JSP页面,这个JSP页面运行起来不比有 scriptlet 的时候差。 当前我们的自定义标记还很简单,在下一期,我们将扩展其功能。到时候网上见。 参考资料 还是JSP技术的初学者吗?那么请参见由Brett McLaughlin撰写的JSP最佳实践系列前面的几期。 您或许还想研究一下对遵从JSP规范的IDE的使用。那么下面有一些选择: JEdit NetBeans Eclipse 在JCP.org网站,您可以找到JSP规范说明书。 Jeff Wilson的“利用自定义标记控制您的JSP页面” (developerWorks, 2002年1月) 是关于自定义标记库通信的入门读物。 “使用JSP和JDBC技术的动态的基于Web的数据访问”(developerWorks, 2001年9月) 演示了对于访问和操纵JSP页面中内容必不可少的一些技术。 Noel Bergman的“JSPtaglibs: 设计带来更好的可用性”(developerWorks,2001年12月) 介绍了自定义标记库工具,这种工具允许创建JSTL。 Mark Kolb的“JSTL 初级读物” (developerWorks, 2003年2月至5月)对JSP标准标记库(JSP Standard Tag Library)作了完整的介绍。 要获得对JSP技术的指导性的介绍,请参见Noel Bergman的教程“JavaServer Pages 技术简介”(developerWorks, 2001年8月)。 要获得JSP技术的细节,您最好的选择是读JSP规范说明书。 Hans Bergsten的JavaServer Pages(O'Reilly & Associates, 2002)是学习JSP技术时不可或缺的资料。 参见developerWorks Java 技术教程页面 以获得完整的免费教程清单。 在developerWorks Java 技术专区 您可以找到大量关于Java编程各个方面的文章(包括更多关于JSP技术的文章)。
|
到页首 |
相关文章推荐
- 30分钟玩转Blog定制
- admin类[jscript]
- ASP.NET中常用的JavaScript操作
- 面向对象的JavaScript编程
- 再论面向对象的Javascript编程
- 面向对象的JavaScript编程
- about javascript
- pb中动态创建浏览器的OLE对象
- 中文字符从jsp传送到servlet的处理
- Web应用开发方式
- JSP/Servlet构建三层管理信息系统
- 40种网页常用小技巧(javascript)
- JavaScript写打开窗口
- html及javascript技巧备份
- JSP-----循序渐进教程
- 一个可以在页面上随意画线、多边形、圆,填充等功能的js
- 解决网页屏蔽的另类方法
- javascript-action
- Some basic javascript usage
- JSTL 入门:表达式语言简化对 JSP 应用的软件维护