分享
 
 
 

竹笋炒肉的cocoon学习笔记

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

http://hedong.3322.org/

cocoon读[ke'ku:n],茧的意思。

接连看到几篇文章谈cocoon,因其中牵扯术语太多,看后一头雾水,遂起学习之心。

网上找到很多谈cocoon的,IBM : developerWorks 中国网站 的在线教程写得最棒。下面就是学习笔记,觉得有意思就顺手记下来了。

以下三行是取源码的命令。

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic -z3 checkout -r cocoon_20_branch xml-cocoon2

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic logout

管道由一些输入数据以及随后对它进行的一些处理步骤构成。每个处理步骤接受前一步的输出作为输入,一直到达管道的末端并产生最终输出。

Cocoon 包含许多常规管道组件,根据在管道中扮演的角色,它们分组成几种完全不同的类型。

管道输入 — 生成器(如FileGenerator,HTMLGenerator,DirectoryGenerator)和阅读器(常用来读静态文件)

处理步骤 — 转换器(如XSLT 转换器)和操作

管道输出 — 序列化器(如XML,HTML,SVG,PDF序列化器 )

条件的处理 — 匹配器和选择器

Cocoon 管道通常至少由生成器和序列化器组成,但可能含有任意数量的处理步骤。将数据作为 SAX 事件通过 Cocoon 管道传递。

对接收请求和为响应提供服务的逻辑周期如下:

1、从用户接受请求。

2、确定用来解释该请求并生成响应的适当管道(使用匹配器)。

3、从可用的预配置的组件构造管道。

4、指示管道为请求服务。

5、将由管道生成的响应返回用户,可能对结果进行高速缓存以便以后使用。

网站地图(sitemap)两个功能:

1、声明组件;

2、定义管道。

XML Server Pages(XSP)编译过程如下图:

XSP语法:

1、xsp:page 元素是每个 XSP 文档的根元素。它必须有一个标识该页面包含的编程语言 — 具体说就是“java”— 的语言属性。

该页面元素可能包含:

任意数目的 xsp:structure 元素

任意数目的 xsp:logic 元素

单个用户元素

这最后一个限制非常重要。“用户元素”表示不在 XSP 名称空间中的任何元素,包括无名称空间的元素。之所以有这个限制是因为用户元素成为由 XSP 页面创建的 XML 文档的根元素,而 XML 文档只能有单个根元素。

2、xsp:structure 和 xsp:include 元素用于向代码生成过程提供这些附加提示。这两个元素是一前一后使用的,xsp:structure 元素将许多 xsp:include 元素组合在一起。每个 xsp:include 定义一个要导入的附加 Java 包或类。

3、xsp:logic 元素用于将 Java 代码块添加到 XSP。

在这些元素作为 xsp:page 元素的直接子元素出现的任何地方(也就是,单个用户元素以外),这个代码块都应包含方法定义和/或成员变量。之所以存在这一点是因为出现在用户元素以外的代码不包含在生成器的 generate() 方法内。常规的 Java 语法规则意味着这个代码必须是成员或类(也就是,静态)变量或方法。

xsp:logic 元素也可以使用在 XSP 页面的其它地方。在这种情况下,它们应该包含将被添加到已编译的生成器中的 generate() 方法的 Java 语句。这使 xsp:logic 元素类似于 JSP 页面中使用的 scriptlet 语法。

4、CDATA 节,它向 XML 解析器发出信号以对于那节内容不采用良好格式规则

<![CDATA[...]]>

5、xsp:expr 元素用于封装一个表达式,该表达式的值将直接添加到输出文档。与此相反,xsp:logic 元素包含生成器的代码。因此,xsp:expr 元素等价于在 JSP 中实现类似角色的 <%= ... %> 表达式语法。例如:

<elements>

<xsp:logic>

for (int i=1; i<11; i++)

{

<element><xsp:expr>i</xsp:expr></element>

}

</xsp:logic>

</elements>

6、通过使用 xsp:element 生成动态元素。如:

<xsp:element prefix="my" uri="http://www.examples.org">

<xsp:param name="name"><xsp:expr>"myElementName"</xsp:expr></xsp:param>

Element content

</xsp:element>

这个示例生成了以下 XML 输出:

<my:myElementName xmlns:my="http://www.examples.org">Element content</my:myElementName>

7、通过使用 xsp:attribute 生成动态属性

<xsp:element>

<xsp:param name="name"><xsp:expr>"myElementName"</xsp:expr></xsp:param>

<xsp:attribute name="myAttribute">myAttributeValue</xsp:attribute>

Element content

</xsp:element>

和(两个例程没关系)

<image>

<xsp:attribute name="href"><xsp:expr>calculateImageURL()</xsp:expr></xsp:attribute>

</image>

8、xsp:comment 和 xsp:pi 元素用于创建注释和处理指令。

<xsp:comment>This is a comment</xsp:comment>

然后这个注释变成:

<!-- This is a comment -->

请注意:尽管任何文本将被添加到注释,但任何嵌套标记都被忽略了。

创建处理指令类似于创建动态元素或属性。xsp:pi 元素应该有一个标识处理指令目标的嵌套参数。照例对 xsp:pi 元素的剩余内容求值。这里是一个简单示例:

<xsp:pi target="myApplication">

<xsp:expr>"param1=value, param2=value, generatorTimestamp=" +

System.currentTimeMillis()</xsp:expr>

</xsp:pi>

输出如下:

<?myApplication param1=value, param2=value, generatorTimestamp=1017407796870?>

逻辑单是可以被添加到 XSP 页面的定制元素库,是通过使用 XSLT 转换实现的。这些转换将附加的代码块和/或 XSP 标记引入到 XSP 文档,这样扩展了产生 Generator 类的能力。

每个逻辑单都与一个特殊的名称空间关联。使用逻辑单仅仅涉及在 XSP 文档中声明相应的名称空间,然后在需要的时候添加来自那个名称空间的元素。如

<xsp:page language="java"

xmlns:xsp="http://apache.org/xsp"

xmlns:util="http://apache.org/xsp/util/2.0">

<clock>

<day><util:time format="EE"/></day>

<month><util:time format="MMMM"/></month>

<year><util:time format="yyyy"/></year>

<time><util:time format="HH:mm:ss 'on' dd/MM/yyyy"/></time>

</clock>

</xsp:page>

请注意该页面声明了实用程序的名称空间 http://apache.org/xsp/util/2.0,并使用一个附加的元素,而没有插入任何附加 Java 代码。当对它求值时,这个页面产生:

<clock>

<day>Fri</day>

<month>March</month>

<year>2002</year>

<time>15:14:27 on 29/03/2002</time>

</clock>

Cocoon 2 提供了许多预先定义的逻辑单,它们提供大量有用功能,而不必编写 Java 代码。根据这些预先定义的的逻辑单提供的功能类型,可以对它们进行松散分类:

1、环境(Environmental)逻辑单 — 提供了对 Cocoon 处理环境的访问(例如,请求和响应) ,有以下四个:

1)请求(request)逻辑单提供了对请求属性的访问,包括对请求参数、请求方法(例如,GET、POST 等等)以及请求标题的访问。当请求参数的某些方面用于改变输出文档的生成时,这个逻辑单就格外有用。

2)响应(response)逻辑单提供对与当前请求关联的 HTTP 响应的限制访问;它只提供对请求标题的访问。XSP 文档不能用与 Java Servlet 或 JSP 页面相同的方法执行包含或转发,因为分离问题是 Cocoon 2 体系结构的核心部分。这个功能描述在网站地图中;XSP 页面生成 XML 内容而不指导处理。

3)会话(session)逻辑单提供了对 HTTP 会话信息的访问,包括创建和删除会话以及添加和除去会话属性的能力。很明显,这个功能在必须为上下文维护用户会话的 Web 应用程序中是最有用的。Cocoon 2 中的会话管理正好等价于它的 JSP 对手。

4)cookie 逻辑单提供了 cookie 维护功能,诸如添加和除去 cookie、允许优先存储到用户的浏览器中。

2、实用程序逻辑单 — 多用途实用程序代码(例如,文件包含、日志记录、发送邮件等等)

有三个逻辑单,每个逻辑单都提供了一些简单的实用程序功能。

1)日期和时间

2)日志(log)逻辑单处理用户请求时,它允许从 XSP 生成器上写入日志消息。如:

<log:debug>This is a debug message from an XSP generator</log:debug>

还有附加的 info、warn、error 和 fatal-error 元素用于写其它各种日志语句。

3)发送邮件(sendmail) 逻辑单包含了一个提供从 XSP 页面对 JavaMail API 访问的有用元素,如:

<sendmail:send-mail from="myemail@email.com" to="user@user.com" smtphost="smtphost@email.com">

<xsp:param name="subject"><xsp:expr>"The subject of this email..."</xsp:expr></xsp:param>

<xsp:param name="body"><xsp:expr>"The body of this email..."</xsp:expr></xsp:param>

</sendmail:send-mail>

3、数据操作 — 提供了对数据验证和与数据库关联的功能的访问

有两个逻辑单属于该类别,其中的一个提供了比另一个明显更多的功能。

表单验证器(form validator)逻辑单从未真正单独使用。它向 Cocoon 表单验证器行为(Cocoon Form Validator Action)提供一个整齐的界面。这个行为能够对从 HTML 表单发送到 Cocoon 应用程序的数据执行基本验证操作,包括检查整数的最小和最大值、检查字符串的大小以及检查提供的某些参数。一个著名功能是能够测试传递的变量是否匹配给定的正则表达式。

验证的结果存储在请求参数中。验证器(validator)逻辑单提供了解释来自 XSP 页面内的这些结果的方法。这样允许为用户动态生成错误消息。

在数据被确认为有效之后,下一步是将那个数据存储到数据库中。esql 逻辑单提供了执行这一步的方法,并提供了更多的功能,包括选择、删除和更新数据库。本质上,esql 逻辑单提供了将 SQL 语句直接嵌入到 XSP 文档的方法。然后这个逻辑单生成相应的 JDBC 代码来实现 SQL 操作,这样通过使用 Cocoon 2 简化了对数据库数据的操作和检索。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有