为什么要把JSP选作自己主要的服务器端应用程序编写工具呢?当然,JSP迷人的特性和功能不少,但JSP标签库是让我做出这一决定的最重要诱因之一。

为什么这样说呢?原因有两个:维护和开发速度。服务器端脚本语言其实就像是开发Internet的熔炉。在一个服务器页面上,你可以很方便地混合各种不同的脚本方法和对象。这种页面简直就是建筑Web的混凝土。正是这种“材料”的混合给予了服务器端脚本强大的信息处理能力。它可以让服务器端程序设计人员开发出动态的、灵活的Web页面。但是,另一方面,脚本的自由混合却很难得到维护,特别是随着项目规模的不断增长而显得尤其严重。我们将不得不让有经验的程序员来建立和维护最终产品,结果让这些程序员成为了一般的Web设计人员。服务器端应用程序在最终的图形设计和实现这两方面上就弱化了。更糟糕的是,因为这些页面对代码而言变得很复杂,开发速度也就相应降低了。最后,许多中等规模或者大型的服务器端 Web应用程序很晚才得以推出而且成本也无法控制。此外,在实现了这些应用程序之后,许多销售商还必须去寻找合格的程序员来维护这种乱得如同一盆意大利面条似的代码。

我们谁都不愿意看到这样的结果,所以,为了克服这个问题,ASP引进了COM对象技术,而JSP则提供了J2EE作为对策。这些解决方案都是建立在集中的、可重用代码库的机制之上。但是,他们使用起来可就太难了,耗费的时间也很多。还有,这些解决方案并没有减少建立混乱代码的诱惑,结果,我们只能组织起大型的、内部结构良好的开发团队来使用这些技术。这就意味着,尽管我们目前都已经有了建立大型项目的以上方法,中等规模的项目却没有被这些技术所光顾。

可现实是,中等规模的项目才是Web应用程序中的主体部分。所以,许多项目不得不面对其开发和维护环境不能满足其需要的局面。

幸好,JSP为我们提供了解决这一问题的最佳方案,标签库(Tag libraries)提供了建立可重用代码块的简单方式。但是和COM和J2EE不同的是,你不需要掌握任何额外的技能就可以建立标签库:如果你会编写 JSP页面,你就会建立标签库。最后,标签库还改进了Web应用程序的维护性。这种对维护性的改进表现在:轻易地在JSP页面上就实现了基于XML的可定制接口。结果可想而知,Web设计人员可以建立JSP Web应用程序而无需知道JSP是怎么回事。这样一来,Web开发就成为一项非常富有效率的团队开发任务了。JSP程序员可以建立定制的标签和后端代码模块,而Web设计人员则可以使用定制标签并且全力关注于Web设计本身。标签库解决了代码混乱的问题,而且做得干净漂亮(事实上,XML才是解决这些问题的本质所在,但是标签库还是起到了相当关键的作用)。

什么是标签库?

JSP标签库(也被称作定制标签)是一种通过JavaBean生成基于XML的脚本的方法。从概念上将,标签就是很简单而且可重用的代码结构。比方说,在我们最新发布的JSPKit(在JSP Insider内)中,我们就使用XML标签实现了对XML文档的轻松访问。请看以下的清单A。

清单A:执行XML/XSL 转换的示例标签及其所在的HTML页面
<!--taglib uri="http://www.jspinsider.com/jspkit/JAXP" prefix="JAXP-->
c:/xml/example.xml
c:/xml/example.xsl

以上的示例使用了简单的标签来访问处在幕后的更强大代码。在以上的事例中首先装载了一个XML文件,然后应用了一个XSL文件来创建一个将被发送到客户端的结果??这一切不过仅仅只是用了一个很简单的标签。

定制标签使得JSP项目中很容易创建重用的开放源代码模块。而你的全部需要不过就是标签库及其文档。标签库的重要特性如下所示:

易于安装在多个项目上

标签很容易从一个JSP项目迁移到其他项目。一旦建立了一个标签库,你只需要把这个个标签库包装成一个 JAR文件就可以在其他JSP项目中重新使用了。不能重用的是你作为程序员在建立标签时所加进标签的内容。因为标签可以重新使用,所以标签库可以轻松地用于你自己的项目。目前,最好的标签资源可以在JSPTags.com这个站点找到。.

扩展JSP标签库

标签库可以具备JSP规范(JSP 1.2)中的任何特性和功能。这也意味着你拥有了无限的能力可以扩展和增加JSP的强大功能却无需等待新版本JSP的发布。所以说,你完全可以取消页面上的JSP include调用了??只需用include标签建立自己的规范就可以了。

易于维护

标签库使得JSP Web应用程序变得很容易维护。主要有以下几个原因:

标签对任何人而言都很容易使用、易于理解。

你的所有逻辑都驻留在处于中心的标签处理器和JavaBean内。这样一来,如果你不得不更新你的代码,你只需要处理这些中心文件而无需修正使用这些代码的其他页面。

如果你需要增加新的功能,你不必改变任何已经存在的页面。你可以把额外的属性包含到你的标签内从而引进新的行为同时保留以前的属性,实现旧页面的正常运行。

比方说,你可能有如下的一个标签,它让你的文本都显示蓝色:
My Text但是随着项目的进行,你又想让蓝色变暗。于是你保留自己的标签但是为其增加了一个新的属性:shade
My Text所有的老标签继续显示蓝色,但现在你可以使用同一标签来产生变暗的蓝色文本了。

标签提升了代码的重用性。那些经过多次测试和使用的代码肯定具有更少的bug。所以,使用定制标签的JSP页面也同样具有更少的缺陷,维护起来自然方便多了。

更快的开发速度

标签库是一种重用代码的好办法。我们知道,服务器端语言标准的重用代码方式是使用模版。标签库和模版库这种方式相比则好得多。采用模版库,你就需要针对每个项目修改模版或者建立生硬的接口。标签库则没有这些限制,而其所具有的面向对象特性则让标签库不仅用法灵活而且扩展能力极为强大。还有,因为你重用代码,结果在项目开发上花费的时间就大大降低了,而更多的时间则可以用来设计自己的Web应用程序。标签库的简单接口使得这些代码用法简单、易于调试。

虽然标签库用起来特别简单,但是,建立其内部支持层次可比建立简单的JavaBean复杂多了。这种复杂性的主要原因在于标签库包含了好几个部分。而你所需要掌握的技能不过是理解、熟悉Java和JSP。

定制标签内幕

一个简单的定制JSP标签包括了以下几个要素:

JavaBean:为了充分利用Java的面向对象特性,重用代码应当放置在独立的代码容器内。这些JavaBean可不是标签库的一部分。他们是标签库用来执行所分配任务的基础代码模块。

标签处理器:这是标签库的真正核心。标签处理器(tag handler)引用它所需要的任何外部材料(JavaBean)并且负责访问JSP页面的信息(PageContext对象)。而JSP页面则把页面上设置的标签属性都传递给标签处理器,JSP页面上的标签标示的内容也是这样处理的。当标签处理器完成其处理过程,它就会把处理后的输出结果回送给JSP页面做进一步处理。

标签库描述符(TLD文件):这是一种很简单的XML文件,TLD文件描述和说明了属性、信息和标签处理器文件位置等信息。JSP 容器使用这一文件来映射被调用标签库的位置和用法。

Web站点的web.xml文件:其实这就是你的Web站点上的初始化文件。在这个文件内你可以定义Web应用程序中使用的定制标签,还可以定义用来描述每个定制标签的TLD文件。

发布文件(WAR或JAR文件):如果你打算重用定制标签,那么你肯定需要想个简便的办法把标签从一个项目迁移到其他项目中去。把标签库打包成一个JAR文件就是这种既方便又高效的标签库发布方式。我们在以上的事例中没有建立JAR文件,但是如果你打算更进一步地了解JAR文件的细节,你不妨阅读“JSP WAR文件简介”。

 

转自:http://developer.51cto.com/art/200906/132293.htm