Apache Cocoon 概述
Apache Cocoon是一个纯JAVA开发的 网页内容发布框架,它将内容(纯数据)、逻辑和表现形式分别放到不同的xml文件中,然后用XSL来将它们组合并显示出来。这种结构的好处是,表现与内容无关,例如,存放在一个XML文件中的一本书的内容,可以根据表现形式的不同要求,用XSL转换成HTML格式、PDF格式甚至是WML(当然现在WAP已经不适用了)等不同的形式,而且由于XML的表现无关性,使之作为一种标准的传输交换数据格式在B2B(企业-企业)商务活动中以及分布式程序的传输交互(例如,SOAP)中有着广阔的应用。
XSP即:Extensible Server Pages的缩写,它通过在XML文件中加入Java程序来实现商务逻辑,由于XML文件中的数据是通过XSL来表现的,所以XSP做到了把内容与显示分开。想一想你熟悉的动态脚本:asp、php、jsp是怎么做的?它们是把逻辑代码插入到HTML页面中来工作的,也就是说内容与显示并没有分开。这很轻易造成麻烦,假如你用这些技术开发过网站就会有体会,必须先等美工人员给你做好了的HTML页面,然后你嵌入你的那些代码(假如做的够久,干脆Ctrl+C and Ctrl+V)。以后美工人员想改点什么还要先抓住你问:“老兄,我动动这块儿没事吧?”。更糟糕的是网站要改版呢?
在用Cocoon构建网站中,工作人员被分为三种:XML文件的编写者、XSP的编写者和XSL的编写者。XML文件的编写者主要是编写XML文件格式,DTD或者Schema,这工作相当于通常网站的内容编辑。XSP编写者就是负责往XML文件中加入Java逻辑代码,来动态控制内容,这工作相当于通常网站的ASP、PHP、JSP程序编写者。XSL编写者负责编写显示页面的XSL文件,也就是通常网站的美工人员,不过这比一般美工人员要求高,因为XSL由模板组成,就是一个个调用XML的相关元素而没有内容的空架子,这些模板也是有固定语法的,具体怎么回事可以学习 Cocoon。
Apache Cocoon 的目标是帮助分离内容格式、逻辑和对基于 XML 的网站管理功能。Cocoon 使用 XML、Extensible Stylesheet Language Transformations(XSLT),以及 Simple API for XML(SAX)技术,以帮助创建、部署和维护 XML 服务器应用程序。它支持大多数类型的数据源,包括 RDBMS、LDAP 和文件系统。在某种意义上,可将Cocoon视为一个基于XML的内容管理系统,因其提供了一种机制来描述Web信息项目(内容)的结构和语义、这些项目的关系、它们如何随着时间的推移而发生改变(逻辑)以及在请求时如何向用户呈现(它们的样式)。事实上,Cocoon项目作为Apache Web服务器项目的一部分,它的作用之一就是组织和控制Apache麾下众多项目的文档化过程。
作为对其真实用途的一个比喻,Cocoon(茧)这个名字具有深远的意义。它代表一种包裹结构,其中的某些东西将从幼虫阶段成长为美丽的蝴蝶,并准备展翅飞翔。但在Apache Cocoon的主页上,没有对这个巧妙的比喻进行说明。相反,它只是对这个项目进行了准确的技术性解释:“Apache Cocoon是一个XML发布框架,它将XML和XSLT技术在服务器应用程序中的应用提升到一个新级别。Cocoon的宗旨是提升管道化SAX处理的性能和扩展性,通过对内容、逻辑和样式的分离来营造一个灵活的环境。”
如何理解:
简单地说,Cocoon管道用于生成和递送内容。内容采用的是某种可识别的形式,由一个生成器和一个序列化器构成。在较典型的Cocoon管道中,生成器之后可能紧接着一个或多个转换器链,而序列化器用于生成不同格式的输出。采取这种方式,同一个源文档可为Web浏览器生成HTML格式的内容,为WAP设备生成WML格式的内容,为打印输出生成PDF格式的内容。
作为一个开发平台,Cocoon最吸引人的地方在于它提供了品种丰富的生成器、转换器和序列化器。人们为Cocoon 2项目开发和捐赠了许多这样的组件。一经捐赠,这些组件就可进行定制,以添加新功能或者进行扩展,从而创建出新的组件。表A总结了适用于Cocoon的一些常用生成器、转换器和序列化器。cocoon 是一个 XML 发布的框架,它允许你定义 xml 文档和文档的转化,并最终生成你所选择的表示形式, 例如 html, pdf, svg 等等。XSP 是 Cocoon 的实现方式, XSP 引擎产生的 XML 文档可以适应于各种变化的状况。另外最重要的是可以实现 静态内容, 表现形式,程序逻辑 的清晰分离 。而且, XSP 是 java 和 XML 结合的框架。
总的来说, cocoon 提供了一个多展现层的工具,这对于我们来说,是个很好的东西,对于 wap, jsp 的共存的设备, cocoon 可以方便的实现一套程序,多个转换。但其弱点在于参考资料不多,不详细,碰到问题常常无法查到问题所在,但对于开源软件的龙头 apache 出的产品,信赖度还是值得相信的。
Apache Cocoon 历史及由来
Cocoon最初的型态是一个简单的Java servlet,全部使用标准W3C组件:用文档对象模型(DOM)来解析文档,用XML来捕捉和格式化数据,用XSLT来转换数据和合并/操纵XML文档,并用XSL来管理文档的表示以便通过Web传送。但人们很快就要求它为其他类型的内容提供服务(比如程序和文档),所以Cocoon逐渐发展成为一个完整的、基于XML的发布框架及系统。
随着时间的推移,几个新的XML组件问世了,比如SAX。另外,XSL也逐渐细分为几个不同的组件,分别提供Transforms、Formatting Objects和XPath功能。这些新标准直接促成了Cocoon 2在2002年的问世,它定义了一个标准的(而且仍在发展的)内容管理系统,并面向公众开放。就目前来说,我们可采取几种不同的方式来描述Cocoon:一个XML发布框架,一个数据源聚合器以及一系列管道和组件的集合。
Apache Cocoon 最新版介绍
Apache Cocoon 发布了 2.1.13 版本,自上一个版本发布,已过去七年有余。
新版本修复了以下 bug:
- 无法在 Windows 上启动 Cocoon 2.1.12
- Cocoon dojo 小部件模板开头的 Apache 许可证导致:dojo.widget.Parse: error:
- XSP 无法与 Java 8 一起使用
- 删除协议部分时,ContextSourceFactory 错误地计算了路径
- XMLEncoder 不支持 Unicode 代理对
- 将 POI 3.0.2 更新为 3.10-FINAL,并修复支持合并标记
- 内容范围和范围标头
- HEAD 请求的 Content-Length 标头不一致
- 无法上传名称包含 “=” 或 “;” 的文件
- 不同步的 HashMap.put 导致无限循环
改进
- C-2.1:升级一些支持产品的依赖项
- 用 ImageIO 代替 ImageReader 中的旧 com.sun.image.* 包
- 使 XMLResourceBundle(和 -Factory)更可扩展
- XMLResourceBundle 在请求外部不可用
- 更新到 poi 3.14
- 更新到 fop 1.1
- 更新到 httpclient 3.1
- XSP 块无法与 Java 8 一起编译
- 更新到 xalan 2.7.2 并添加 serializer 2.7.2
更新说明:http://cocoon.apache.org/2.1/changes.html