日期:2014-05-16  浏览次数:20459 次

JSP标签库介绍

??? 我用JSP和ASP编程已经有一段颇长的时间了,在这两种服务器端的编程解决方案中,我越来越觉得JSP的功能要比ASP强大得多。我为什么要把JSP选作首选服务器端web应用程序开发工具呢?当然,JSP迷人的特性和功能不少,但JSP的标签库是让我做出这一决定的最重要诱因之一。
?????? 为什么这样说呢?原因有两个方面:维护和开发的速度。服务器端脚本语言其实就像是开发Internet的熔炉。在一个服务器页面上,你可以很方便地混合各种不同的脚本方法和对象。这种页面简直就是建筑Web的混凝土。正是这种“材料”的混合给予了服务器端脚本强大的信息处理能力。它可以让服务器端程序设计人员开发出动态的、灵活的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"%>
<JAXP:TransformerTag>
<JAXP:XMLFile>c:/xml/example.xml</JAXP:XMLFile>
<JAXP:XSLFile>c:/xml/example.xsl</JAXP:XSLFile>
</JAXP:TransformerTag>

?? 以上的示例使用了简单的标签来访问处在幕后的更强大代码,标签部分的语句首先装载了一个XML文件,然后应用了一个XSL文件来将XML文件中的内容转换成某个表现格式,并发送给客户端,这一切仅仅只是用了一个很简单的标签。定制标签使得JSP项目中很容易创建重用的开放源代码模块,而你所需要的只是标签库和它的文档说明。

?

标签库的重要特性

?

1.易于安装在多个项目上
标签很容易从一个JSP项目迁移到其他项目。一旦建立了一个标签库,则只需要将所有的东西打包为一个JAR文件,你就可以在任何的JSP项目中重新使用。因为标签可以重新使用,标签库可以轻松地用于你自己的项目,所以标签库越来越通行。目前,最好的标签资源可以在JSPTags.com这个站点找到。
 

2.扩展JSP????? 标签库可以具备JSP规范(JSP 1.2)中的任何特性和功能,你可以无限制地扩展和增加JSP的功能,而无需要等待下一版本JSP的出现。例如,你对JSP的include调用不太满意。你可以建立自己的include标签,该标签执行的是你自己的规范。
 

3.容易维护

标签库使得JSP的web应用程序非常易于维护,原因有:
(1)标签应用简单,对任何人而言都很容易使用、易于理解。
(2)所有的程序逻辑代码都集中放在的标签处理器和JavaBeans中。这意味着你在升级代码时,无需要对每个使用该代码的页面进行修改,你只需要修改集中的代码文件便可。
(3)如果需要加入新的功能,你也无需修改任何已经存在的页面,可以在标签中加入额外的属性,从而引进新的行为,而其它旧的属性不变,这样所有旧的页面还可以正常工作。 例如你有一个让所有文本变蓝的标签:
<BlueText>My Text</BlueText>
但在后来项目中,你又想让蓝色变暗。你可以保留原有的标签,只要为其增加一个新的属性:shade ,如下所示:
<BlueText shade="teal">My Text</BlueText>
所有旧的标签仍然可以产生蓝色的文本,但现在你可以使用同一标签来产生变暗的蓝色文本了。
(4)标签提升了代码的重用性。那些经过多次测试和使用的代码肯定具有更少的bug。所以,使用定制标签的JSP页面也同样具有更少的缺陷,维护起来自然方便多了。

4.快速的开发时间
标签库提供一个简单的方式来重用代码。在服务器端的语言中,其中一个标准的重用代码方式是使用模板。相对于使用模板库,标签库是一个更好的解决办法。使用模板库,你必须为每个项目修改模板或者且建立严格的界面,而标签库则没有这些限制,并且拥有所有面向对象的好处,可以做到灵活和更有扩展性,而且,通过重用代码,你可以花费更少的时间来做开发,更多的时间可以用在设计你的web应用上。标签库的接口也很简单,非常容易做插入、使用和调试。

?

标签的组成结构

?

虽然标签库非常易于使用,不过要建立一个标签库的内部实现机制还是颇复杂的,起码要比建立一个简单的JavaBean复杂。这个复杂是来自于标签库是由几部分构成的。不过,你只需要掌握了Java和JSP的知识就够了。
一个简单的标签由下面的元素构成:
1.JavaBean:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中,也就是JavaBean。这些JavaBeans并不是标签库必不可少的一部分,但它们是标签库用来执行所分配任务的基础代码模块。
2.标签处理器:标签处理器是标签库的真正核心。一个标签处理器(tag handler)引用它所需要的任何外部资源(JavaBean)并且负责访问JSP页面的信息(PageContext对象)。而JSP页面则把页面上设置的标签属性和标签体中的内容都传递给标签处理器,当标签处理器完