posts - 61,  comments - 2033,  trackbacks - 0

            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 簡化了對數據庫數據的操作和檢索。

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

          posted on 2005-11-10 17:56 魚上游 閱讀(468) 評論(0)  編輯  收藏 所屬分類: 爪哇風景欣賞
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(82)

          隨筆分類(59)

          文章分類(21)

          相冊

          收藏夾(40)

          GoodSites

          搜索

          •  

          積分與排名

          • 積分 - 1267734
          • 排名 - 22

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 吕梁市| 古蔺县| 浮梁县| 黎平县| 井研县| 衡南县| 申扎县| 卢湾区| 大田县| 大新县| 鲁甸县| 云阳县| 吉隆县| 博乐市| 镇雄县| 普格县| 息烽县| 肥东县| 涡阳县| 三都| 博白县| 望奎县| 探索| 青河县| 高密市| 云龙县| 七台河市| 拜城县| 永嘉县| 鲁甸县| 女性| 上虞市| 平原县| 论坛| 青田县| 富顺县| 剑河县| 富源县| 八宿县| 陇西县| 永胜县|