Apache Sling について
2009 年 4 月 22 日 水曜日Apache Sling について、紹介します。
インストール
まず、Apache Sling の ダウンロード のページから、ダウンロードします。
今回は、 org.apache.sling.launchpad.app-3-incubator.tar.gz をダウンロードしたと仮定します。
ダウンロード後、保存したディレクトリに移動し、
tar xvzf org.apache.sling.launchpad.app-3-incubator.tar.gz
cd org.apache.sling.launchpad.app-3-incubator
java -jar org.apache.sling.launchpad.app-3-incubator.jar
で起動します。
使ってみる
実際に動かしてみます。
なお、ここでの説明の大部分は、Discover Sling in 15 minutesに基づいています。
コンテンツの作成
まず、
curl -F”sling:resourceType=foo/bar” -F”title=some title” http://admin:admin@localhost:8080/content/mynode
を実行しコンテンツを作成します。ここでは、sling:resourceType が foo/bar、title が some title なコンテンツを作成しました。http://localhost:8080/content/mynode へアクセスすると、以下のような画面が表示されます。
これは、作成されたコンテンツの内容をしめしています。内容を描画する形式としては、デフォルトでは、htmlやjsonが選択できます。たとえば、現状で、http://localhost:8080/content/mynode.html へアクセスすると、
という、表示がされますし、
http://localhost:8080/content/mynode.json へアクセスすると、
{"title":"some title","sling:resourceType":"foo/bar","content":"hogehoge","jcr:primaryType":"nt:unstructured"}
が返されます。
コンテンツの描画
Sling ではコンテンツを描画するために、スクリプトやサーブレットを使用することができます。ここでは、ESP (server-side ECMAscript) を使用した例について説明します。
以下のファイルを、html.esp として保存してください。
<html>
<body>
<h1><%= currentNode.title %></h1>
</body>
</html>
描画する際に、Sling は /apps 以下の sling:resourceType を見に行きます。現在の例であれば、/apps/foo/bar です。
WebDav クライアントを使用して、/apps/foo/bar に html.esp をおくことで、http://localhost:8080/content/mynode.htmlにアクセスした場合に、html.espが使用されることになります。
curl を使う場合は、
curl -X MKCOL http://admin:admin@localhost:8080/apps
curl -X MKCOL http://admin:admin@localhost:8080/apps/foo
curl -X MKCOL http://admin:admin@localhost:8080/apps/foo/bar
curl -X PUT -d @html.esp http://admin:admin@localhost:8080/apps/foo/bar/html.esp
とします。
この状態で、http://localhost:8080/content/mynode.html へアクセスをすると、
と、いう表示がされます。
当然クライアントサイドでの JavaScript も使用でき、例えば、
<html>
<body>
<script src="/system/sling.js"></script>
<script>var node=Sling.getContent("/content/mynode");</script>
<h1><script>document.write(node.title);</script></h1>
</body>
</html>
とすることで、先ほどの ESP の例と同じ表示が得られます。
別のコンテンツの描画内容のインクルード
別なコンテンツを描画した内容をインクルードすることもできます。
以下のファイルを header.esp として保存し、
<div>
<p style="color:blue;">
<%= currentNode.headline %>
</p>
</div>
先ほどと同様に、
curl -X MKCOL http://admin:admin@localhost:8080/apps/foo/header/
curl -X PUT -d @header.esp http://admin:admin@localhost:8080/apps/foo/header/html.esp
でアップロードします。
その後、
curl -F”sling:resourceType=foo/header” -F”headline=some header” http://admin:admin@localhost:8080/content/header
として、コンテンツを作成します。
html.esp も以下のように修正します。
<html>
<body>
<div id="header">
<% sling.include("/content/header"); %>
</div>
<h1><%= currentNode.title %></h1>
</body>
</html>
修正後、http://localhost:8080/content/mynode.html へアクセスすると、以下のような表示になります。






