posts - 12,  comments - 2,  trackbacks - 0

          對(duì) Cocoon 的認(rèn)識(shí)和初步理解(飛刀和雨):

           

          目標(biāo) ,了解 cocoon 的框架結(jié)構(gòu),驗(yàn)證其功能及作用。是否符合手機(jī)平臺(tái)的運(yùn)作,具有的優(yōu)勢(shì)及其不足。

          Cocoon 的基礎(chǔ)知識(shí) ,(網(wǎng)上資料) cocoon 是一個(gè) XML 發(fā)布的框架,它允許你定義 xml 文檔和文檔的轉(zhuǎn)化,并最終生成你所選擇的表示形式, 例如 html, pdf, svg 等等。

          XSP Cocoon 的實(shí)現(xiàn)方式, XSP 引擎產(chǎn)生的 XML 文檔可以適應(yīng)于各種變化的狀況。另外最重要的是可以實(shí)現(xiàn) 靜態(tài)內(nèi)容, 表現(xiàn)形式,程序邏輯 的清晰分離 。而且, XSP java XML 結(jié)合的框架。

          步驟 對(duì)于 Cocoon 的安裝,感覺(jué)并不像其他開源的軟件那么省事,首先要從 Jakatar 網(wǎng)頁(yè)上下載 src 碼,建議在下載源碼之前先看下 doc. 我是在拿到 src 后居然找不到 doc 里提到的 helloworld, ant 進(jìn)行編譯后才看到里面有個(gè) samples 目錄。把 webapp 目錄倒入自己建的項(xiàng)目中,這里我起的項(xiàng)目名字叫 cocoon. 經(jīng)過(guò) jsp-server 的自動(dòng)編譯,生成代碼后在 url 里打入  http://localhost:8080/cocoon/samples/  可以看到 cocoon 自帶的例子。

          對(duì)于 java 的版本, cocoon 在文檔里提到,最好使用1 .4 的,對(duì)于1 . 5以上的 ,   apache 只是用了個(gè)可能有爭(zhēng)議來(lái)敷衍了一下我們,所以在開發(fā)的時(shí)候,應(yīng)當(dāng)建議使用 1.4JDK ,以免碰到無(wú)法解釋的問(wèn)題。而且,用下來(lái),我覺(jué)得文檔不是很完整,我這邊 CocoonInAction 只能看到前幾頁(yè),后面的就打不開了,不知道是不是本來(lái)就是這樣的。

          對(duì)于 cocoon 里的例子,看上去非常的簡(jiǎn)單

          但重起后會(huì)出現(xiàn)以下的問(wèn)題:特別的怪異

          Message: The repository home at

          F:"eclipse-SDK-3.1.1-win32"eclipse"workspace"cocoon"samples"blocks"jcr"repotest appears to be in use. If you are sure it's not in use please delete the file at

          F:"eclipse-SDK-3.1.1-win32"eclipse"workspace"cocoon"samples"blocks"jcr"repotest".lock. Probably the repository was not shutdown properly.

          Description: org.apache.avalon.framework.configuration.ConfigurationException: Cannot access configuration information at jndi:/localhost/cocoon/WEB-INF/cocoon.xconf:2150:106

          Sender: org.apache.cocoon.servlet.CocoonServlet

          Source: Cocoon Servlet

          這里得去查下,為何有這樣的問(wèn)題出現(xiàn)。(估計(jì)是這個(gè) 0 字節(jié)的 lock 文件用來(lái)鎖定用戶的操作,每次必刪)

          在對(duì) Cocoon 進(jìn)行調(diào)試的時(shí)候,要注意有些類包并沒(méi)有帶上 source code, 所以想要調(diào)試源代碼的兄弟們只能邊猜邊調(diào)拉 .^-^ 這些文件包為: components, ojb, faces, forums.

          下面讓我們對(duì) cocoon 的功能進(jìn)行驗(yàn)證一下。

          IntroCocoon.gif

          1.       Cocoon 自帶的例子: Samples/hello-world

          簡(jiǎn)單的形式在 Samples.xml 中體現(xiàn)

          <samples name="Hello, World!">

           <group name="About">

             <note>All examples on this page have been created using a single data source, hello.xml file.

             </note>

             <sample name="XML" href="hello.xml">

              Hello world XML document.

             </sample>

           </group>

          </samples>

          通過(guò)這樣標(biāo)準(zhǔn)的 xml 文件,最終解析成需要的輸出 html, 注意到上面的一個(gè)鏈接,試著打開下 hello.xml, 更簡(jiǎn)單的結(jié)構(gòu),

          <page>

           <title>Hello</title>

           <content>

           <para>This is my first Cocoon page!</para>

           </content>

          </page>

          從輸出可以看出這是標(biāo)準(zhǔn)的頁(yè)面格式

          hello_cocoon.JPG

          也同時(shí)證明了 Cocoon 可以支持多種格式的內(nèi)容。比如, xml, html,xhtml,wml,chtml 等等。

          2 .下面開始一個(gè)獨(dú)立的項(xiàng)目。就以 hello 為例。

          首先新建一個(gè) web 項(xiàng)目 , 并建一個(gè)文件 hello.xsp.

          <?xml version="1.0" encoding="iso-8859-1"?>

          <?cocoon-process type="xsp"?>

              <xsp:page language="java" xmlns:xsp="http://apache.org/xsp">

                 <xsp:logic>

                 String Hello="Hello,Cocoon!";

                 </xsp:logic>

                 <page>

                     <xsp:expr>Hello</xsp:expr>

                 </page>

          </xsp:page>

          然后建一個(gè)轉(zhuǎn)換文件在 hello.xsl

          <? xml version = " 1.0 " encoding = "iso-8859-1" ?>

          < xsl : stylesheet version = " 1.0 " xmlns : xsl = " http : // www.w3.org /1999/XSL/transform " >

          < xsl : template match = " / " >

          < html >

              < body bgcolor = "#ffcccc" >

                 < p allign = "center" >< br />< br />< b >

                 < font size = "5" color = "navy" >

                     < xsl : value-of select = " page " />

                 </ font ></ b ></ p >

              </ body >

          </ html >

          </ xsl : template >

          </ xsl : stylesheet >

          當(dāng)然這些還是不夠的,于是,補(bǔ)上一個(gè) map 文件, hello.xmap 主要就是定義一下源碼的位置和引用的位子。這個(gè) xmap 的作用非常重要,這是整個(gè)項(xiàng)目中連接 pipline 的數(shù)據(jù)都定義在這個(gè)文件里,

          因?yàn)樵谂渲?/span>  cocoon 上遇到了點(diǎn)障礙,耽擱了一段時(shí)間,可能這些也是些剛接觸的人會(huì)碰到的問(wèn)題,因此這里把這些都做些詳細(xì)的介紹下。

          Web.xml 里有必須帶如下的設(shè)置:

          <web-app>

           <servlet>

              <servlet-name>Cocoon</servlet-name>

              <display-name>Cocoon</display-name>

              <servlet-class>org.apache.cocoon.servlet.CocoonServlet</servlet-class>

              <init-param>

                <param-name>init-classloader</param-name>

                <param-value>false</param-value>

              </init-param>

              <init-param>

                <param-name>force-property</param-name>

                <param-value>        org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogKitLogger

               </param-value>

              </init-param>

              <init-param>

                <param-name>configurations</param-name>

                <param-value>/WEB-INF/cocoon.xconf</param-value>

              </init-param>

              <init-param>

                <param-name>logkit-config</param-name>

                <param-value>/WEB-INF/logkit.xconf</param-value>

              </init-param>

              <init-param>

                <param-name>servlet-logger</param-name>

                <param-value>access</param-value>

              </init-param>

              <init-param>

                <param-name>cocoon-logger</param-name>

                <param-value>core</param-value>

              </init-param>

              <init-param>

                <param-name>log-level</param-name>

                <param-value>WARN</param-value>

              </init-param>

              <init-param>

                <param-name>forbidden-deprecation-level</param-name>

                <param-value>ERROR</param-value>

              </init-param>

              <init-param>

                <param-name>allow-reload</param-name>

                <param-value>no</param-value>

              </init-param>

              <init-param>

                <param-name>enable-uploads</param-name>

                <param-value>true</param-value>

              </init-param>

              <init-param>

                <param-name>overwrite-uploads</param-name>

                <param-value>rename</param-value>

              </init-param>

              <init-param>

                <param-name>manage-exceptions</param-name>

                <param-value>true</param-value>

              </init-param>

              <init-param>

                <param-name>enable-instrumentation</param-name>

                <param-value>false</param-value>

              </init-param>

              <init-param>

                <param-name>instrumentation-config</param-name>

                <param-value>/WEB-INF/instrumentation.xconf</param-value>

              </init-param>

              <init-param>

                <param-name>container-encoding</param-name>

                <param-value>ISO-8859-1</param-value>

              </init-param>

              <init-param>

                <param-name>form-encoding</param-name>

                <param-value>ISO-8859-1</param-value>

              </init-param>

              <load-on-startup>1</load-on-startup>

           </servlet>

              <servlet>

                  <servlet-name>webdav</servlet-name>

                  <display-name>Slide DAV Server</display-name>

                   <servlet-name>Xindice</servlet-name>

              <display-name>Xindice XML-RPC Server</display-name>

           <servlet-class>org.apache.xindice.server.XindiceServlet</servlet-class>

              <init-param>

                <param-name>xindice.configuration</param-name>

                <param-value>WEB-INF/xindice.xml</param-value>

              </init-param>

              <load-on-startup>1</load-on-startup>

           </servlet>

           <servlet-mapping>

              <servlet-name>Cocoon</servlet-name>

              <url-pattern>/</url-pattern>

           </servlet-mapping>

           <servlet-mapping>

              <servlet-name>Cocoon</servlet-name>

              <url-pattern>*.jsp</url-pattern>

           </servlet-mapping>

           <servlet-mapping>

              <servlet-name>Cocoon</servlet-name>

              <url-pattern>*.html</url-pattern>

           </servlet-mapping>

           <mime-mapping>

              <extension>css</extension>

              <mime-type>text/css</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>xml</extension>

              <mime-type>text/xml</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>xsl</extension>

              <mime-type>text/xml</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>xconf</extension>

              <mime-type>text/xml</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>xmap</extension>

              <mime-type>text/xml</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>ent</extension>

              <mime-type>text/plain</mime-type>

           </mime-mapping>

           <mime-mapping>

              <extension>grm</extension>

              <mime-type>text/plain</mime-type>

           </mime-mapping>

          </ web-app >

          這些都是 web.xml 里面配置 cocoon 參數(shù)所必需的。參考 lenya 后發(fā)現(xiàn)其 web.xml ,及其相關(guān)的 xconf 文件都是原版照用 cocoon ,因此在改造其功能用于手機(jī)平臺(tái),大可直接使用其上述列出的參數(shù)。這樣不容易出現(xiàn)奇怪的問(wèn)題。

          2 對(duì)于 xmap 文件的編寫,即 xsp 的語(yǔ)法。對(duì)于一個(gè)熟悉 jsp 的程序員來(lái)說(shuō),應(yīng)該不是一個(gè)很困難的問(wèn)題,具體如下。

          <xsp:page> XSP 文檔的根元素

          <xsp:expr> 類似于 <%= ... %> 表達(dá)式語(yǔ)法

          <xsp:logic> 類似于 <% ... %> 表達(dá)式語(yǔ)法

          <xsp:include> 類似于 <%@page include ... %> 表達(dá)式語(yǔ)法

          <xsp:structure> 把許多 include 聯(lián)系在一起

          <xsp:element> 生成動(dòng)態(tài)元素

          <xsp:attribute> 生成動(dòng)態(tài)屬性

          <xsp:comment> 注釋 <!-- ...-->

          <xsp:pi> 創(chuàng)建處理創(chuàng)建動(dòng)態(tài)元素或?qū)傩?/span>

          因此 xsp 相對(duì)不會(huì)那么復(fù)雜,但是對(duì)于其上面那么多參數(shù)配置,弄清楚每一個(gè)參數(shù)的作用,到的確是很費(fèi)力的一件事情。

          總的來(lái)說(shuō), cocoon 提供了一個(gè)多展現(xiàn)層的工具,這對(duì)于我們來(lái)說(shuō),是個(gè)很好的東西,對(duì)于 wap , jsp 的共存的設(shè)備, cocoon 可以方便的實(shí)現(xiàn)一套程序,多個(gè)轉(zhuǎn)換。但其弱點(diǎn)在于參考資料不多,不詳細(xì),碰到問(wèn)題常常無(wú)法查到問(wèn)題所在,但對(duì)于開源軟件的龍頭 apache 出的產(chǎn)品,信賴度還是值得相信的。

          posted on 2008-12-16 14:33 doodoosun 閱讀(112) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類(6)

          隨筆檔案(11)

          文章分類(30)

          文章檔案(34)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乐陵市| 裕民县| 耒阳市| 洞口县| 青冈县| 旺苍县| 社会| 武隆县| 永康市| 平远县| 扶绥县| 基隆市| 页游| 游戏| 屏东县| 马边| 黄骅市| 大埔区| 红河县| 马山县| 天长市| 泽州县| 禄丰县| 万宁市| 友谊县| 托克逊县| 个旧市| 长兴县| 富宁县| 瓦房店市| 榕江县| 石阡县| 肃宁县| 卫辉市| 石屏县| 海晏县| 乌兰察布市| 咸阳市| 滦南县| 沙河市| 安泽县|