株式会社ラクス  ITエンジニア総合支援サイト スタックアスタリスク フルマネージド専用サーバー エクスユニット
ITエンジニアとして 知る 学ぶ
 
Java
.NET
PHP
プログラミング一般
DataBase
システム/サーバ構築
システム/サーバ運用
技術系一般知識
そのまま使えるシリーズ
J2EE TIPS
 
The Apache Ant Project
Sun MicroSystems
The Apache Jakarta Project
Caucho Technology
eclipse.org
>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.はじめに

 VelocityJakartaプロジェクトで開発されている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との違いを簡単にまとめてみました。

  1. JSPはコンテナ上で実行されるため、JSPのバージョンに合ったコンテナが必要となる。Velocityは、それ自体は単なるAPIの集合のため、どのような環境でも動作する。
  2. JSPファイルをブラウザやHTMLエディタで開いた場合、ブラウザやHTMLエディタが理解できないタグが多数でてきてデザインが壊れて見える。そのため、出力イメージを確認するためにコンテナ上で、実際に動かして見なければならない。Velocityの場合、JSPに比べてデザインが壊れにくい。これは、後々のデザイン変更時の開発期間の短縮につながる。

 本連載では、全3回にわたりユーティリティーとしてのVelocity(第1回)、Velocityを用いたWEBアプリケーション開発(第2回)、VelocityとStrutsを連携させたWEBアプリケーション開発(第3回)を見ていきます。
 第1回は「チケットショップ」を題材としたサンプルコードを通し、Velocityテンプレートエンジンとしての機能を紹介します。


▼Java や Linux を体系的に学びましょう!▼
Stack*のラクスが、
新学習方式のカリキュラムを開発しました!
14700円から(*1)、Java や Linux を体系的に学べます!!
(*1 テキスト代のみの税込料金です)



2.Velocityとは?

 では具体的なVelocityの働きをみていきましょう。まず、全体のイメージをつかむため、1.はじめにで紹介した「Fax送信票+値→出力」をVelocityテンプレートエンジンの働きと照らし合わせたのが、以下の図です。


図1: Velocityの基本概念

 「Fax送信票に必要なデータを入力し送信する」という動作は、Velocityでは「テンプレート(VMファイル)にデータを格納し、マージ(統合)する。」と置き換えることが出来ます。
 各項目についてひとつひとつ見ていきましょう。

○ VMファイル
 Velocityではvmという拡張子を持つ、テキスト形式のファイルをテンプレートとして使用します。テンプレートからは、VelocityContextが保持するJavaのオブジェクトへのアクセスや、他のテキストファイル等を読み込み、出力結果を生成する事が出来ます。
また、VelocityにはVTLVelocity 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つです。しかし、そのファイル内で記述されたVTLVelocityにより解析されます。

表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 |

【 関連記事 】
【連載】Velocity
  第1回:汎用テンプレートエンジンVelocity
  第2回:Velocityを用いたWEBアプリケーション開発
  第3回:VelocityとStrutsを用いたWEBアプリケーション開発

サイト内全文検索
スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。


簡単レンタルメールフォーム
300メガ1000円〜 XBitのレンタルサーバー
500メガ1995円〜 電話サポート/PostgreSQL/専用SSLなどにも対応!お客様のニーズを網羅したレンタルサーバ
ホームページ制作のアシストウェブ
STACK* 執筆の講師陣から習得する!! ITエンジニアスクール アイティブースト
統合メールサポートシステム 〜MailDealer(メールディーラー)〜
システム開発,IT教育 〜株式会社アイティーブースト(ITBoost)〜
簡単 営業支援/顧客管理ツール Easy Sales
  利用規約 お問い合わせ・ご意見 スタックアスタリスクについて 運営会社について 
  レンタルサーバー ホスティング 専用サーバー メールフォーム ショッピングカート メール共有 ITエンジニア派遣 Linux講座 Java講座 メール配信 レンタルサーバー Webデータベース 検索サービス
CopyrightcRAKUS Co.,Ltd. All Rights Reserved.  メール管理・共有 顧客管理(CRM)もできるメール対応サポートシステム JAVA LINUX CISCO 技術者派遣 育成事業 株式会社ラクス