|
|
| cocoon 2是如何工作的? |
作者:
文章来源:
访问次数:1次
加入时间:2005年01月01日
|
|
author:cocoonhome
虽然cocoon是一个强有力的XML发布框架,但他其实还是一个Servlet。他的职责如同其他Servlet一样,接收请求(Request)、执行处理、生成响应(Response)。Cocoon 工作时,首先捕捉到请求(Request),去匹配相应的管道(Pipeline),按管道定义执行处理,最后将处理结果返回。
Pipeline结构管道是一种简单雅致的结构,非常适合XML SAX的处理模式。
管道一般是由三种Cocoon的核心组件构成。这三种组件就是:生成器(generators)、转换器(transformers), 和序列化器(serializers)。XML数据(SAX events )由一个组件相应的处理后传递到另一个组件,一直到最后被序列化成Response输出流返回给发出了相应请求(Request)的用户。
Generators, Transformers, and Serializers 生成器(Generators)一般处于管道的头部。生成器的职责就是读取数据,然后创建要传递给其他组件的SAX 事件。在Cocoon中已经内置了一部分常用的生成器,可以用来读取XML、HTML、XSP等文件,当然我们也可以创建新的生成器来处理特殊的数据。
序列化器(Serializers)一般是在管道的末尾,序列化器的职责是将SAX 事件流转换成适合于响应的格式。同样,在Cocoon中已经内置了一些常见的序列化器,用来生成HTML、纯文本、PDF 文档等。
作为可选择的部分,一个或者多个转换器(Transformers)可以放置在生成器和序列化器之间。转换器允许开发人员在SAX 事件流被序列化器前做一些操作。使用最广泛的转换器是 XSLT 转换器。它将其输入传递到执行 XSLT 转换的 XSLT 处理器中,然后将转换的结果作为 SAX 事件反馈到管道。在管道中放置多个转换器可以让我们的XSL样式单变得尽可能的小。
虽然在Cocoon中还有其他的一些很有用的组件,但是上面介绍的三个组件是Cocoon的核心,简单优美却又功能强大。
管道实例 我们来看一个简单的"Hello World"管道,我们的这个管道按下面的定义来工作:
使用"file generator" 来读取HelloWorld.xml文件
使用"XSLT transformer"运行Style.xsl将XML转换成HTML格式
使用"HTML serializer"返回给用户HMTL页面
那么Sitemap中管道的定义看上去就是这个样子:
...... <map:pipelines> ...... <map:pipeline> <map:match pattern="HelloWorld.html"> <map:generate src="HelloWorld.xml"/> <map:transform src="Style.xsl"/> <map:serialize/> </map:match> </map:pipeline> ...... </map:pipelines> ......
这样当用户请求HelloWorld.html时,Cocoon就会匹配到这个管道,并按照管道的定义读取HelloWorld.xml,用Style.xsl转换,序列化成HTML,返回给用户。
|
|
|