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>
|
(first uploaded 2003/02/02 last updated 2003/03/08, URANO398)
|