作ؓ对其真实用途的一个比喻,CocoonQ茧Q这个名字具有深q的意义。它代表一U包裹结构,其中的某些东西将从幼虫阶D|长ؓ丽的蝴Ӟq准备展飞。但在Apache Cocoon?a target="_target">主页上,没有对这个y妙的比喻q行说明。相反,它只是对q个目q行了准的技术性解释:“Apache Cocoon是一个XML发布框架Q它XML和XSLT技术在服务器应用程序中的应用提升到一个新U别。Cocoon的宗旨是提升道化SAX处理的性能和扩展性,通过对内宏V逻辑和样式的分离来营造一个灵zȝ环境。?br />
Cocoon最初的型态是一个简单的Java servletQ全部用标准W3ClgQ用文档对象模型QDOMQ来解析文档Q用XML来捕捉和格式化数据,用XSLT来{换数据和合ƈ/操纵XML文档Qƈ用XSL来管理文档的表示以便通过Web传送。但Z很快p求它为其他类型的内容提供服务Q比如程序和文档Q,所以Cocoon逐渐发展成ؓ一个完整的、基于XML的发布框架及pȝ?br />
随着旉的推U,几个新的XMLlg问世了,比如SAX。另外,XSL也逐渐l分为几个不同的lgQ分别提供Transforms、Formatting Objects和XPath功能。这些新标准直接促成了Cocoon 2?002q的问世Q它定义了一个标准的Q而且仍在发展的)内容理pȝQƈ面向公众开放?br />
q前来_我们可采取几U不同的方式来描qCocoonQ一个XML发布框架Q一个数据源聚合器以及一pd道和组件的集合?/p>
CocoonZ对SAX事g的管道式处理。Web应用E序如果围绕q个框架来构建,获得较好的扩展性和性能。利用一个集中式的配|系l,你可以方便地创徏、部|和l护Web应用E序。Cocoon使用了一个缓存系l,所有组仉可根据需要进行动态配|。接收到用户h后,会自动检查缓存,判断h的URIQ统一资源标识W)是否存在。如果存在,q接传递缓存的内容Q不需要通过一个管道来处理它?br />
Cocoon可作Z个抽象的引擎使用Q通过一个Java servletQ,它基于自定义的协议处理程序,能通过标准URI来访问外部数据源。Cocoon甚至能递归调用自nQ数据能在多个管道化阶段同时处理Q从而提高处理速度和效率?br />
Cocoon体系l构的核心设计思想是模块化和抽象处理。Cocoon道在概念上和UNIXpȝ中用的道差不多,只是Cocoon道中的所有元素都是通过解析XML文档而创建的SAX事g。Cocoon识别3U类型的道元素Q组ӞQ分别是生成器(generatorsQ、{换器QtransformersQ和序列化器QserializersQ。其中,生成器用一个请求的URI来生成SAX事gQ{换器使用SAX事gq生成其他SAX事gQ序列化器用SAX事gq生成一些响应?br />
单地_Cocoon道用于生成和递送内宏V内定w用的是某U可识别的Ş式,׃个生成器和一个序列化器构成。在较典型的Cocoon道中,生成器之后可能紧接着一个或多个转换器链Q而序列化器用于生成不同格式的输出。采取这U方式,同一个源文档可ؓWeb览器生成HTML格式的内容,为WAP讑֤生成WML格式的内容,为打印输出生成PDF格式的内宏V?br />
作ؓ一个开发^収ͼCocoon最吸引人的地方在于它提供了品种丰富的生成器、{换器和序列化器。h们ؓCocoon 2目开发和捐赠了许多这Llg。一l捐赠,q些lg可q行定制Q以d新功能或者进行扩展,从而创建出新的lg?b>?/b>Aȝ了适用于Cocoon的一些常用生成器、{换器和序列化器?br />
表A
cd | 名称 | 说明 |
生成?/td> | DirectoryGenerator | 目录列表{换成XML格式Q以便从中生成SAX事g |
生成?/td> | FileGenerator | 解析一个文件或URIQƈ生成SAX事g |
生成?/td> | JSPGenerator | ҎJSP|生成XML和SAX事g |
生成?/td> | ServerPagesGenerator | ҎXSP|生成XML和SAX |
转换?/td> | i18nTransformer | 使用i18n字典和语a参数值来转换SAX事g |
转换?/td> | XincludeTransformer | 通过为现有的SAX添加SAX事gQ从而处?em>xinclude命名I间Qƈ包括外部?/em> |
转换?/td> | XSLTransformer | ҎXSLT样式表定义来转换SAX事g?/td> |
序列化器 | HTMLSerializer | ҎSAX事g来生成HTML响应 |
序列化器 | PDFSerializer | ҎSAX事gQ用Apache FOPQ格式输出处理器Q来生成PDF |
序列化器 | SVG2JPGSerializer | ҎSVG SAX事gQ用Apache Batik来生成JPEG囑փ |
序列化器 | TextSerializer | ҎSAX事g来生成纯文本输出Q适用于非XML文本Q比如CSS或程序语a代码 |
序列化器 | XMLSerializer | ҎSAX事g来生成XML响应 |
如所你见QCocoon的功能ƈ非只是简单地数据格式化成HTML。在未来的文章中Q我们将研究如何在Cocoon环境中创建和处理文档Qƈ更详l地介绍在这个环境中工作所牉|的问题。就目前来说Q你只需理解Cocoon是针对多U目的来捕捉、呈现和递送Web内容的一U方式?/p>