简介:Scriptlet对于快而杂(fast-and-dirty)的编码来说是一种不错的选择,但是从长远来看,您需 要为您的JSP页面选择一种不那么杂乱的解决方案。在本期的 JSP最佳实践中,BrettMcLaughlin 向您展示 了如何将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所招致的所有令人头痛的事情。例如,您可以看到 这样的标记:
<store:shoppingCart id="1097629"/>
或者这样的标记:
<tools:usageGraph />
每个标记都包含了指向一个Java类的引用,但是类中的代码仍然在它该在的地方:在标签之外,一个 编译好的类文件之中。
从 scriptlet 到标记
创建一个自定义标记的第一步就是决定您想怎样使用它,如何称呼它,以及它允许使用或者需要什么 属性(如果有的话)。对于时间戳标记,我们所需要的很简单:只要一个能够输出一个页面的最后修改数 据的简单标记。
因为不需要属性,这个标记看上去就是这个样子:
<site-utils:lastModified />
这个标记的名称和前缀是一样的:都是 site-utils 。元素的内容是空的,这意味着该元素中不允许 有子元素存在。定义了这个标记之后,接下来的一步就是实现它的行为。