|
|
 |
| >IT技術情報>Java>Velocity:第1回:汎用テンプレートエンジンVelocity
|
 |
 |
【連載 】Velocity
第1回:汎用テンプレートエンジンVelocity
|
|
現在、JavaにおけるWebアプリケーション開発においてはほとんどの場合、MVCアーキテクチャが用いられます。MVCアーキテクチャのViewの部分にはJSPが広く使われていますが、文法が複雑であったり、Java言語知識が必要だったりするため多くの代替技術も開発されています。Velocityも、JSPに変わるものとして注目されている技術の一つです。 VelocityはTomcatやStrutsと同じJakarta Projectで開発された汎用テンプレートエンジンです。本連載では、Velocityのもつテンプレートエンジンの機能から、Webアプリケーションへの適用までを扱っていきます。
|
岸本貴行
株式会社アイティーブースト
2004/5/21 |
|
 |
|
 |
 |
【 目次 】
1.はじめに
2.Velocityとは?
3.Hello
!! Velocity
3_1.ライブラリの準備
3_2.ファイルの配置
3_3.出力結果
4.次回予告
|
 |
【実行環境】
OS WindowsXP
IDE Eclipse2.1.2
JDK JDK 1.4.2 |
|
1.はじめに
VelocityはJakartaプロジェクトで開発されているJavaベースの「汎用テンプレートエンジン」です。
テンプレートエンジンとはどのようなものでしょうか。
あるユーザーが書類を作成し、Faxでその書類を送信したいとします。この場合、ユーザーがFax送信票に必要なデータを記入しFaxの送信ボタンを押すと、相手先にその内容が出力されます。このように、テンプレート(Fax送信票)に値(データ)をセットし、出力する仕組みをテンプレートエンジンといいます。
Velocityは、汎用のテンプレートエンジンです。出力結果はテキストであれば、どんな形式のデータでも出力することができます。主に以下にような用途で使われています。
- テキストファイル編集ツール
- Webアプリケーションにおける表示の作成
- ソースコードジェネレーターとしての利用(EJBやO/Rマッピングツールなど)
- SQL文の処理
- XMLの生成
|
また、VelocityはJava言語で書かれているため、Javaの特徴である「プラットフォームを選ばない」というメリットもあります。さらに、Velocityの利用はJavaプログラムからいくつかのVelocity
APIを用いて、とても簡単に利用することができます。
このようにVelocityはさまざまな用途、さまざまなプラットフォーム上で使用できますが、特に広く使われているのがJavaにおけるWebアプリケーションの「表示」の部分です。Javaを用いたWebアプリケーション開発では、MVCアーキテクチャに沿った開発が広く用いられていますが、このView部分にVelocityを用いることが出来ます。
MVCアーキテクチャのView部分でよく使われるJSPとVelocityとの違いを簡単にまとめてみました。
- JSPはコンテナ上で実行されるため、JSPのバージョンに合ったコンテナが必要となる。Velocityは、それ自体は単なるAPIの集合のため、どのような環境でも動作する。
- JSPファイルをブラウザやHTMLエディタで開いた場合、ブラウザやHTMLエディタが理解できないタグが多数でてきてデザインが壊れて見える。そのため、出力イメージを確認するためにコンテナ上で、実際に動かして見なければならない。Velocityの場合、JSPに比べてデザインが壊れにくい。これは、後々のデザイン変更時の開発期間の短縮につながる。
|
本連載では、全3回にわたりユーティリティーとしてのVelocity(第1回)、Velocityを用いたWEBアプリケーション開発(第2回)、VelocityとStrutsを連携させたWEBアプリケーション開発(第3回)を見ていきます。
第1回は「チケットショップ」を題材としたサンプルコードを通し、Velocityのテンプレートエンジンとしての機能を紹介します。
2.Velocityとは?
では具体的なVelocityの働きをみていきましょう。まず、全体のイメージをつかむため、1.はじめにで紹介した「Fax送信票+値→出力」をVelocityのテンプレートエンジンの働きと照らし合わせたのが、以下の図です。

図1: Velocityの基本概念
「Fax送信票に必要なデータを入力し送信する」という動作は、Velocityでは「テンプレート(VMファイル)にデータを格納し、マージ(統合)する。」と置き換えることが出来ます。
各項目についてひとつひとつ見ていきましょう。
○ VMファイル
Velocityではvmという拡張子を持つ、テキスト形式のファイルをテンプレートとして使用します。テンプレートからは、VelocityContextが保持するJavaのオブジェクトへのアクセスや、他のテキストファイル等を読み込み、出力結果を生成する事が出来ます。
また、VelocityにはVTL(Velocity
Template Language)という単純で強力なマクロ言語があり、vmファイル内にて条件分岐や繰り返し処理などを行うことが出来ます。
表1に、使用頻度の高いVTLの構文をまとめました。
|
構文
|
機 能
|
|
##コメント
|
1行分のコメントです。出力結果には含まれません。
|
|
#*
コメント
*#
|
複数行のコメントです。出力結果には含まれません。
|
|
$変数名
|
変数の参照するオブジェクトの文字列表現を返します。
変数がnullの場合、「$変数名」という文字列が出力されます。
|
|
#foreach($変数1 in $変数2)
・・・・・・・・・・
#end
|
繰り返し処理を行います。
参照2の保持する各値を順番に取り出し、参照1がそれを参照します。
この構文内では、$velocityCount
と記述することにより、現在の繰り返し処理の回数を表示します。(デフォルトでは、1からカウントします。)
|
|
#if(条件式)
・・・・・・・・・・
[#elseif(式)]
・・・・・・・・・・
[#else]
・・・・・・・・・・
#end
|
条件文
条件式には、以下の論理式が使用出来ます。
#if($hoge == $foo) 等号演算子
#if($hoge > 28)
#if($hoge >= 28)
#if($hoge <= 28)
#if($hoge = 28) 数値の等号
#if($hoge = "hoge") 文字列等号
|
|
#include(引数1,引数2, ・・・)
|
vmファイル内から他のテキストファイルをインクルードします。複数指定の際は、カンマで区切ります。
|
|
#parse(引数)
|
#includeと基本的には同じですが、引数に指定できるテキストファイルは1つです。しかし、そのファイル内で記述されたVTLもVelocityにより解析されます。
|
|
表1:VTLの構文
*なお詳細は、Apache
Jakarta Project のサイトをご覧下さい。
○ VelocityContext
テンプレートエンジンは、予めテンプレートを用意しておき、そのテンプレートに値をセットして(mergeして)データを完成させます。VelocityContextは、このテンプレートにセットする値を管理するためのオブジェクトです。VelocityContextは、HashMapオブジェクトなどと同じくMapインターフェースを実装しており、名前をつけて値をセットします。テンプレートの中からは、VelocityContextにセットされた値をVTLを使って簡単にアクセスすることができます。
○ merge
mergeとは、アプリケーション内にて、vmファイルとVelocityContextを結合し出力結果を得る処理を指します。具体的には、org.apache.velocity.app.Velocityクラスのmerge(Context
, Writer)メソッドを実行します。詳しくは、この後のサンプルコードにて説明します。
>>次のページへ
|
 |
【 ページ 】 | 1 | 2
| 3
|
|
 |
【 関連記事 】
|
|
 |
 |
|
サイト内全文検索 |
| スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。 |
|