Cocoon2とXSP

 XSP(EXtensible Server Pages, XML Server Pagesとも?)は、 Cocoonに搭載されている、 XML文書をJavaプログラムで生成するための仕組みです。 ということはJSPとよく似たものですが、 最大の違いは JavaコードのロジックをHTML文書ではなく、XML文書 (XHTML文書でも可)に書く、という点です。 Javaコードを埋め込む際にはxsp:なにがしというタグが使われます。

 このページでは、XSPのさわりだけ、 CocoonドキュメントのXSP Guideに忠実にのっとってやってみます。 まず、FAQとなっている日本語に関する問題があります。 デフォルト設定ではXSPのコンパイルに使用するJavaコンパイラは Pizzaとゆーコンパイラが使われていますが、 このコンパイラでは日本語ソースの処理が正常にできず、 文字化けしてしまいます。 そこで、$COCOON_HOME/WEB-INF/cocoon.xconf から「Pizza」という文字を検索して、以下のように書き換えます。

<programming-languages>
  <java-language logger="core.language.java" name="java">
  <!--
  <parameter name="compiler"
   value="org.apache.cocoon.components.language.programming.java.Pizza"/>
  -->
  <parameter name="compiler"
   value="org.apache.cocoon.components.language.programming.java.Javac"/>
  </java-language>
 ...(略)...
</programming-languages>

 ではさっそく、Javaコードで文字列を作って、埋め込んでみるサンプル (helloworld.xml) です。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsp:page xmlns:xsp="http://apache.org/xsp">

<hello>
  ハロー、
  <xsp:logic>
    String a;
    a = "Hello, ";
    a += "World.ド。…";
  </xsp:logic>
  <xsp:expr> a </xsp:expr>
</hello>
</xsp:page>

 このように、XML文書の中に、 xsp:logicタグと xsp:exprタグを使って、 Javaコードを埋め込むだけです。xsl:logicで囲んだ範囲には、 任意のJavaコード(≒ロジック)が書けます。 xsp:exprタグの中には、XML文書内に出力する式を書きます。

 上のサンプルは、XML文書を生成するので、 これをHTMLに変換するXSLスタイルシートが必要です。 これは普通のXSLスタイルシートでよく、ここでは下のように作ってみました (helloworld.xsl)。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsp="http://apache.org/xsp"
  xmlns:hello="http://urano.dav/examples/hello"
  version="1.0">

<xsl:output method="html" encoding="Shift_JIS" version="1.0"/>

<xsl:template match="hello">
<html><body>
<font color="red"><xsl:value-of select="."/></font>
</body></html>
</xsl:template>
</xsl:stylesheet>

 最後に、sitemap.xmapの書き方です。

<map:match pattern="helloworld.html">
  <map:generate type="serverpages" src="helloworld.xml"/>
  <map:transform src="helloworld.xsl"/>
  <map:serialize type="html"/>
</map:match>

なお、XSPが直接XHTML文書を生成する場合には、 単に間のXSLT変換を抜いて、以下のように書けばOKです。

<map:match pattern="helloworld.html">
  <map:generate type="serverpages" src="helloworld.xml"/>
  <map:serialize type="html"/>
</map:match>

Baykit and Cocoon Top

(first uploaded 2003/02/02 last updated 2003/03/08, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル