posts - 12,  comments - 2,  trackbacks - 0

          Cocoon 的認識和初步理解(飛刀和雨):

           

          目標 ,了解 cocoon 的框架結構,驗證其功能及作用。是否符合手機平臺的運作,具有的優勢及其不足。

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

          XSP Cocoon 的實現方式, XSP 引擎產生的 XML 文檔可以適應于各種變化的狀況。另外最重要的是可以實現 靜態內容, 表現形式,程序邏輯 的清晰分離 。而且, XSP java XML 結合的框架。

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

          對于 java 的版本, cocoon 在文檔里提到,最好使用1 .4 的,對于1 . 5以上的 ,   apache 只是用了個可能有爭議來敷衍了一下我們,所以在開發的時候,應當建議使用 1.4JDK ,以免碰到無法解釋的問題。而且,用下來,我覺得文檔不是很完整,我這邊 CocoonInAction 只能看到前幾頁,后面的就打不開了,不知道是不是本來就是這樣的。

          對于 cocoon 里的例子,看上去非常的簡單

          但重起后會出現以下的問題:特別的怪異

          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

          這里得去查下,為何有這樣的問題出現。(估計是這個 0 字節的 lock 文件用來鎖定用戶的操作,每次必刪)

          在對 Cocoon 進行調試的時候,要注意有些類包并沒有帶上 source code, 所以想要調試源代碼的兄弟們只能邊猜邊調拉 .^-^ 這些文件包為: components, ojb, faces, forums.

          下面讓我們對 cocoon 的功能進行驗證一下。

          IntroCocoon.gif

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

          簡單的形式在 Samples.xml 中體現

          <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>

          通過這樣標準的 xml 文件,最終解析成需要的輸出 html, 注意到上面的一個鏈接,試著打開下 hello.xml, 更簡單的結構,

          <page>

           <title>Hello</title>

           <content>

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

           </content>

          </page>

          從輸出可以看出這是標準的頁面格式

          hello_cocoon.JPG

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

          2 .下面開始一個獨立的項目。就以 hello 為例。

          首先新建一個 web 項目 , 并建一個文件 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>

          然后建一個轉換文件在 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 >

          當然這些還是不夠的,于是,補上一個 map 文件, hello.xmap 主要就是定義一下源碼的位置和引用的位子。這個 xmap 的作用非常重要,這是整個項目中連接 pipline 的數據都定義在這個文件里,

          因為在配置  cocoon 上遇到了點障礙,耽擱了一段時間,可能這些也是些剛接觸的人會碰到的問題,因此這里把這些都做些詳細的介紹下。

          Web.xml 里有必須帶如下的設置:

          <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 參數所必需的。參考 lenya 后發現其 web.xml ,及其相關的 xconf 文件都是原版照用 cocoon ,因此在改造其功能用于手機平臺,大可直接使用其上述列出的參數。這樣不容易出現奇怪的問題。

          2 對于 xmap 文件的編寫,即 xsp 的語法。對于一個熟悉 jsp 的程序員來說,應該不是一個很困難的問題,具體如下。

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

          <xsp:expr> 類似于 <%= ... %> 表達式語法

          <xsp:logic> 類似于 <% ... %> 表達式語法

          <xsp:include> 類似于 <%@page include ... %> 表達式語法

          <xsp:structure> 把許多 include 聯系在一起

          <xsp:element> 生成動態元素

          <xsp:attribute> 生成動態屬性

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

          <xsp:pi> 創建處理創建動態元素或屬性

          因此 xsp 相對不會那么復雜,但是對于其上面那么多參數配置,弄清楚每一個參數的作用,到的確是很費力的一件事情。

          總的來說, cocoon 提供了一個多展現層的工具,這對于我們來說,是個很好的東西,對于 wap jsp 的共存的設備, cocoon 可以方便的實現一套程序,多個轉換。但其弱點在于參考資料不多,不詳細,碰到問題常常無法查到問題所在,但對于開源軟件的龍頭 apache 出的產品,信賴度還是值得相信的。

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(6)

          隨筆檔案(11)

          文章分類(30)

          文章檔案(34)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安新县| 延边| 葫芦岛市| 武冈市| 崇礼县| 东乌珠穆沁旗| 阿拉善盟| 泗洪县| 义乌市| 龙泉市| 林州市| 公安县| 常熟市| 措美县| 普格县| 通化市| 巴楚县| 抚远县| 镇康县| 津南区| 南丹县| 芷江| 石楼县| 清流县| 陕西省| 勐海县| 体育| 台南市| 饶河县| 长宁区| 德兴市| 安福县| 平江县| 平阴县| 汤原县| 湟源县| 佛教| 安化县| 平陆县| 青铜峡市| 永寿县|