posts - 61,  comments - 2033,  trackbacks - 0

            cocoon讀[ke'ku:n],繭的意思。

            接連看到幾篇文章談cocoon,因其中牽扯術(shù)語太多,看后一頭霧水,遂起學(xué)習(xí)之心。

            網(wǎng)上找到很多談cocoon的,IBM : developerWorks 中國網(wǎng)站 的在線教程寫得最棒。下面就是學(xué)習(xí)筆記,覺得有意思就順手記下來了。

            以下三行是取源碼的命令。
            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
            
            管道由一些輸入數(shù)據(jù)以及隨后對它進(jìn)行的一些處理步驟構(gòu)成。每個處理步驟接受前一步的輸出作為輸入,一直到達(dá)管道的末端并產(chǎn)生最終輸出。

            Cocoon 包含許多常規(guī)管道組件,根據(jù)在管道中扮演的角色,它們分組成幾種完全不同的類型。

            管道輸入 — 生成器(如FileGenerator,HTMLGenerator,DirectoryGenerator)和閱讀器(常用來讀靜態(tài)文件)
            處理步驟 — 轉(zhuǎn)換器(如XSLT 轉(zhuǎn)換器)和操作
            管道輸出 — 序列化器(如XML,HTML,SVG,PDF序列化器 )
            條件的處理 — 匹配器和選擇器

            Cocoon 管道通常至少由生成器和序列化器組成,但可能含有任意數(shù)量的處理步驟。將數(shù)據(jù)作為 SAX 事件通過 Cocoon 管道傳遞。

            對接收請求和為響應(yīng)提供服務(wù)的邏輯周期如下:
            1、從用戶接受請求。
            2、確定用來解釋該請求并生成響應(yīng)的適當(dāng)管道(使用匹配器)。
            3、從可用的預(yù)配置的組件構(gòu)造管道。
            4、指示管道為請求服務(wù)。
            5、將由管道生成的響應(yīng)返回用戶,可能對結(jié)果進(jìn)行高速緩存以便以后使用。

            網(wǎng)站地圖(sitemap)兩個功能:
            1、聲明組件;
            2、定義管道。

            XML Server Pages(XSP)編譯過程如下圖:
            

            XSP語法:
            1、xsp:page 元素是每個 XSP 文檔的根元素。它必須有一個標(biāo)識該頁面包含的編程語言 — 具體說就是“java”— 的語言屬性。
            該頁面元素可能包含:
             任意數(shù)目的 xsp:structure 元素
             任意數(shù)目的 xsp:logic 元素
             單個用戶元素
            這最后一個限制非常重要。“用戶元素”表示不在 XSP 名稱空間中的任何元素,包括無名稱空間的元素。之所以有這個限制是因?yàn)橛脩粼爻蔀橛?XSP 頁面創(chuàng)建的 XML 文檔的根元素,而 XML 文檔只能有單個根元素。

            2、xsp:structure 和 xsp:include 元素用于向代碼生成過程提供這些附加提示。這兩個元素是一前一后使用的,xsp:structure 元素將許多 xsp:include 元素組合在一起。每個 xsp:include 定義一個要導(dǎo)入的附加 Java 包或類。

            3、xsp:logic 元素用于將 Java 代碼塊添加到 XSP。
            在這些元素作為 xsp:page 元素的直接子元素出現(xiàn)的任何地方(也就是,單個用戶元素以外),這個代碼塊都應(yīng)包含方法定義和/或成員變量。之所以存在這一點(diǎn)是因?yàn)槌霈F(xiàn)在用戶元素以外的代碼不包含在生成器的 generate() 方法內(nèi)。常規(guī)的 Java 語法規(guī)則意味著這個代碼必須是成員或類(也就是,靜態(tài))變量或方法。
            xsp:logic 元素也可以使用在 XSP 頁面的其它地方。在這種情況下,它們應(yīng)該包含將被添加到已編譯的生成器中的 generate() 方法的 Java 語句。這使 xsp:logic 元素類似于 JSP 頁面中使用的 <% ... %>scriptlet 語法。

            4、CDATA 節(jié),它向 XML 解析器發(fā)出信號以對于那節(jié)內(nèi)容不采用良好格式規(guī)則
            <![CDATA[...]]>

            5、xsp:expr 元素用于封裝一個表達(dá)式,該表達(dá)式的值將直接添加到輸出文檔。與此相反,xsp:logic 元素包含生成器的代碼。因此,xsp:expr 元素等價于在 JSP 中實(shí)現(xiàn)類似角色的 <%= ... %> 表達(dá)式語法。例如:
          <elements>
             <xsp:logic>
                for (int i=1; i<11; i++)
                {
                   <element><xsp:expr>i</xsp:expr></element>
                }
             </xsp:logic>
          </elements>

            6、通過使用 xsp:element 生成動態(tài)元素。如:
          <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 生成動態(tài)屬性
          <xsp:element>
             <xsp:param name="name"><xsp:expr>"myElementName"</xsp:expr></xsp:param>
             <xsp:attribute name="myAttribute">myAttributeValue</xsp:attribute>
             Element content
          </xsp:element>
          和(兩個例程沒關(guān)系)
          <image>
             <xsp:attribute name="href"><xsp:expr>calculateImageURL()</xsp:expr></xsp:attribute>
          </image>

            8、xsp:comment 和 xsp:pi 元素用于創(chuàng)建注釋和處理指令。
          <xsp:comment>This is a comment</xsp:comment>
          然后這個注釋變成:
          <!-- This is a comment -->
          請注意:盡管任何文本將被添加到注釋,但任何嵌套標(biāo)記都被忽略了。

          創(chuàng)建處理指令類似于創(chuàng)建動態(tài)元素或?qū)傩浴sp:pi 元素應(yīng)該有一個標(biāo)識處理指令目標(biāo)的嵌套參數(shù)。照例對 xsp:pi 元素的剩余內(nèi)容求值。這里是一個簡單示例:
          <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 轉(zhuǎn)換實(shí)現(xiàn)的。這些轉(zhuǎn)換將附加的代碼塊和/或 XSP 標(biāo)記引入到 XSP 文檔,這樣擴(kuò)展了產(chǎn)生 Generator 類的能力。
            每個邏輯單都與一個特殊的名稱空間關(guān)聯(lián)。使用邏輯單僅僅涉及在 XSP 文檔中聲明相應(yīng)的名稱空間,然后在需要的時候添加來自那個名稱空間的元素。如
          <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>

          請注意該頁面聲明了實(shí)用程序的名稱空間 http://apache.org/xsp/util/2.0,并使用一個附加的元素,而沒有插入任何附加 Java 代碼。當(dāng)對它求值時,這個頁面產(chǎn)生:

          <clock>
             <day>Fri</day>
             <month>March</month>
             <year>2002</year>
             <time>15:14:27 on 29/03/2002</time>
          </clock>

            Cocoon 2 提供了許多預(yù)先定義的邏輯單,它們提供大量有用功能,而不必編寫 Java 代碼。根據(jù)這些預(yù)先定義的的邏輯單提供的功能類型,可以對它們進(jìn)行松散分類:
            1、環(huán)境(Environmental)邏輯單 — 提供了對 Cocoon 處理環(huán)境的訪問(例如,請求和響應(yīng)) ,有以下四個:
            1)請求(request)邏輯單提供了對請求屬性的訪問,包括對請求參數(shù)、請求方法(例如,GET、POST 等等)以及請求標(biāo)題的訪問。當(dāng)請求參數(shù)的某些方面用于改變輸出文檔的生成時,這個邏輯單就格外有用。
            2)響應(yīng)(response)邏輯單提供對與當(dāng)前請求關(guān)聯(lián)的 HTTP 響應(yīng)的限制訪問;它只提供對請求標(biāo)題的訪問。XSP 文檔不能用與 Java Servlet 或 JSP 頁面相同的方法執(zhí)行包含或轉(zhuǎn)發(fā),因?yàn)榉蛛x問題是 Cocoon 2 體系結(jié)構(gòu)的核心部分。這個功能描述在網(wǎng)站地圖中;XSP 頁面生成 XML 內(nèi)容而不指導(dǎo)處理。
            3)會話(session)邏輯單提供了對 HTTP 會話信息的訪問,包括創(chuàng)建和刪除會話以及添加和除去會話屬性的能力。很明顯,這個功能在必須為上下文維護(hù)用戶會話的 Web 應(yīng)用程序中是最有用的。Cocoon 2 中的會話管理正好等價于它的 JSP 對手。
            4)cookie 邏輯單提供了 cookie 維護(hù)功能,諸如添加和除去 cookie、允許優(yōu)先存儲到用戶的瀏覽器中。


            2、實(shí)用程序邏輯單 — 多用途實(shí)用程序代碼(例如,文件包含、日志記錄、發(fā)送郵件等等)
            有三個邏輯單,每個邏輯單都提供了一些簡單的實(shí)用程序功能。
            1)日期和時間

            2)日志(log)邏輯單處理用戶請求時,它允許從 XSP 生成器上寫入日志消息。如:
          <log:debug>This is a debug message from an XSP generator</log:debug>
          還有附加的 info、warn、error 和 fatal-error 元素用于寫其它各種日志語句。

            3)發(fā)送郵件(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、數(shù)據(jù)操作 — 提供了對數(shù)據(jù)驗(yàn)證和與數(shù)據(jù)庫關(guān)聯(lián)的功能的訪問
          有兩個邏輯單屬于該類別,其中的一個提供了比另一個明顯更多的功能。

            表單驗(yàn)證器(form validator)邏輯單從未真正單獨(dú)使用。它向 Cocoon 表單驗(yàn)證器行為(Cocoon Form Validator Action)提供一個整齊的界面。這個行為能夠?qū)?HTML 表單發(fā)送到 Cocoon 應(yīng)用程序的數(shù)據(jù)執(zhí)行基本驗(yàn)證操作,包括檢查整數(shù)的最小和最大值、檢查字符串的大小以及檢查提供的某些參數(shù)。一個著名功能是能夠測試傳遞的變量是否匹配給定的正則表達(dá)式。

            驗(yàn)證的結(jié)果存儲在請求參數(shù)中。驗(yàn)證器(validator)邏輯單提供了解釋來自 XSP 頁面內(nèi)的這些結(jié)果的方法。這樣允許為用戶動態(tài)生成錯誤消息。

            在數(shù)據(jù)被確認(rèn)為有效之后,下一步是將那個數(shù)據(jù)存儲到數(shù)據(jù)庫中。esql 邏輯單提供了執(zhí)行這一步的方法,并提供了更多的功能,包括選擇、刪除和更新數(shù)據(jù)庫。本質(zhì)上,esql 邏輯單提供了將 SQL 語句直接嵌入到 XSP 文檔的方法。然后這個邏輯單生成相應(yīng)的 JDBC 代碼來實(shí)現(xiàn) SQL 操作,這樣通過使用 Cocoon 2 簡化了對數(shù)據(jù)庫數(shù)據(jù)的操作和檢索。

          http://hedong.3322.org/1stblog/archives.html

          posted on 2005-11-10 17:56 魚上游 閱讀(472) 評論(0)  編輯  收藏 所屬分類: 爪哇風(fēng)景欣賞
          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(82)

          隨筆分類(59)

          文章分類(21)

          相冊

          收藏夾(40)

          GoodSites

          搜索

          •  

          積分與排名

          • 積分 - 1268166
          • 排名 - 22

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 漳州市| 长兴县| 晋江市| 乌兰察布市| 财经| 项城市| 家居| 湖州市| 黔江区| 太保市| 肇东市| 六枝特区| 呼玛县| 新泰市| 高唐县| 汝城县| 巩义市| 丰镇市| 米泉市| 永仁县| 黄冈市| 饶河县| 宁海县| 镇康县| 万载县| 香河县| 临武县| 秀山| 衡山县| 阳高县| 孝感市| 五大连池市| 碌曲县| 巴林右旗| 桑日县| 柏乡县| 博爱县| 红原县| 临西县| 大港区| 灵宝市|