Velocity

作成 2003/5/7

実験環境

Velocityって?

Velocityは汎用テンプレートエンジンです。 汎用というのは、Web、HTML、XMLなどに限らずテキストなら何でも対象になるということです。 テンプレートエンジンというのは、テンプレートを用意しておいて、 そこに値を入れていく仕組みです。
テンプレート 作成文書
FAX送信票
送信先
送信元
要件
FAX送信票
送信先 わたし
送信元 あなた
要件  すき

サーブレットにHTMLを書くのはあまりに酷いです。

out.println("<html>");
out.println("<body>");
out.println(message);
out.println("</body>");
out.println("</html>");

JSPでHTML内にプログラムを埋め込むことで、 大分楽になりました。

<html>
<body>
<%=request.getAttribute("message")%>
</body>
</html>

カスタムタグを使えば、もっとキレイです。でも見にくいでしょ?

<html>
<body>
<bean:write name="mesasge"/>
</body>
</html>

というわけでVelocityです。

<html>
<body>
$message
</body>
</html>

もっと詳しく知りたい人はこちら

Jakarta公式サイト
http://jakarta.apache.org/velocity/

Jakartaプロジェクト徹底攻略 テンプレートエンジンVelocityでいこう
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1561-4

Ja-Jakarta翻訳
http://www.jajakarta.org/velocity/

プログラマーのための動的ページ作成法
http://kwatch.tripod.co.jp/web/dynamic-page.html

Velocityのインストール

公式サイトのURLから最新版のアーカイブをダウンロードします。 ここでは、1.3.1を使いました。

アーカイブを展開し、適当なディレクトリに配置します。 Velocityを配置したディレクトリを以下%VEL_HOME%と記述します。

サンプルを使ってみる

準備:velocityのJARの構築

まず、%VEL_HOME%/buildディレクトリでant jar(jarターゲット)を行い、 binディレクトリにvelocityのjarを構築します (ルートにも同じものが元々ありますが)。

いくつかサンプルを実行してみましょう。

app_example1

簡単なアプリケーションの例です。 example.batが実行スクリプトです。

example.batのクラスパスの通し方がちょっとオシャレですね。 (Velocityと関係ないところに感心)

set VELCP=.
for %%i in (..\..\bin\*.jar) do set VELCP=%VELCP%;%%i
for %%i in (..\..\build\lib\*.jar) do set VELCP=%VELCP%;%%i
クラスファイルがないので、コンパイルします。 クラスパスを通すのがめんどくさいので、一度exampleを実行して、 設定された%VELCP%を使ってコンパイルすると楽でしょう (やり方間違ってる?)。

javac -classpath %VELCP% *.java

example.batを起動すると、サンプルが実行できます。

forumdemo

FORMを使ったWebアプリケーションの例です。 (単一のサーブレットのサンプルはservlet_example1など)

%VEL_HOME%binでANTを使ってビルドします。

ant example(exampleターゲット)

作成された、forumdemo.warをデプロイ(TOMCATならwebappにコピー)します。

anakia

Anakiaアプリケーションの例です。AnakiaはVelocityのサブモジュールで、 XMLを利用しHTMLなどのドキュメントを作成します。 AnakiaはAntのタスクとして利用できます。

anakia/buildディレクトリでantを実行します。

anakiaのdocディレクトリにHTMLが作成されます。

Hello Velocity

参考文献とサンプルを参考にプログラムを作ってみます。

ここで作成するのは、簡単なVelocityアプリケーションです。 Velocityは汎用テンプレートエンジンなので、 mainからはじまるアプリケーションとして実行できます。

hello.vmはVelocityのテンプレートファイルです。 VMファイルにはVTL(Velocity Template Language:Velocityテンプレート言語)を記述できます。JSPのスクリプトレットのようなもんですね。 HelloVel.javaで必要な情報をVelocityコンテキストにセットして、 VMファイルとマージして標準出力に出力しています。

.javaと.vmを同じディレクトリにおいてコンパイル、HelloVelを実行します。 以下のJARをクラスパスに含める必要があります。

画面、実行結果

Hello Velocity Servlet

お次はサーブレットです。

loadConfiguration()でVelocity#init(Properties)な設定をして、 handleRequest()で、Velocityコンテキストに値を設定して、 Templateを返しています。 サンプルまま、工夫もありませんが。

実行する場合は、Webアプリケーションに配置します。 VMファイルはWebアプリケーションのルートから読むようにしています。 上のサンプルと同じJARをクラスパス(WEB-INF/libとか)に追加する必要があります。

画面、ブラウザから実行

感想

WebアプリケーションのViewの選択肢の1つとしてVelocityは面白いかもしれません。 VTLは簡単そうだし。 ただ、J2EEの標準はJSPのELになると思われるので、今後どうなるか? ツールとしてのVelocityも興味いですね。 HTMLの作成や、DDファイルの作成に、、、。 しかし、いろいろ似た目的のツールがある中で、 どれを選ぶべきか。う〜む。


TOP