| Apache/Jakarta編 |
|
Strutsフレームワークを導入する利点の1つに、Webアプリケーションのプレゼンテーション部分(JSPなど)とコントローラ部分(Actionクラス)とが、自然と疎結合になる、ということがあります。すなわち、プレゼンテーション部分もコントローラ部分も、互いに依存することなく、独立したコンポーネントとしてそれぞれ実装することができるのです。これによって例えば、システムのほかの部分を一切いじらずに、プレゼンテーション部分だけを丸ごと入れ替える、といったことが可能になります。
さて、Strutsのプレゼンテーション部分を実装するには、JSPを用いるのが一般的ですが、それ以外の技術を利用することもできます。ここでは、JSPの代替案として利用されることの多い、Apache Jakartaのテンプレート・エンジンVelocityをプレゼンテーション部分に利用するための手順を紹介します。
Velocityは、Javaベースの汎用テンプレート・エンジンです。テンプレート・エンジンとは、あらかじめ作っておいたテンプレートに、実行時にパラメータへ値を割り当てて、データを生成してくれるコンポーネントのことです。用途はHTMLに限らず、XMLやCSV、テキストなどさまざまなデータ形式の生成に利用できます。
Velocityを採用する利点としては、シンプルで習得の容易なテンプレート記述言語VTL(Velocity Template Language)によって、簡単に動的ページを記述できることがあります。開発環境にEclipseをお使いであれば、Velocityプラグインを使って、テンプレートのアウトライン表示や入力補完ができるので便利でしょう。
注:本稿では、Strutsがすでに動作していることを前提に説明します。Strutsのインストールと動作設定については、「サーバサイド技術の学び舎 - WINGS」にある「サーバサイド環境構築設定」を参照してください。
■Velocityの導入方法
Struts上でVelocityを動かすには、Velocityのサブ・プロジェクトであるVelocity Toolsを利用します。導入のステップは、以下のとおりです。
| 1. | velocity-tools-x.x.jar、velocity-dep-x.x.x.jarを、Webアプリケーションのルート配下の「WEB-INF\lib」フォルダに入れる(xはバージョン番号) |
| 2. | web.xmlにVelocityViewServletを配備し、「.vm」拡張子のリクエストとの関連付けを行う(注) |
| 3. | Velocity設定ファイルvelocity.propertiesを用意する |
| 4. | Velocity道具箱設定ファイルvelocity-toolbox.xmlを用意する |
| 注:Velocityテンプレートの拡張子は、通常「.vm」になります。 |
まずは、以下のURLより、Velocity Toolsのバイナリ(velocity-tools-x.x.jarまたはvelocity-tools-x.x.tar.gz)をダウンロードしてください。
http://jakarta.apache.org/site/binindex.cgi#velocity-tools
(1)必要なjarファイルをクラスパスへ追加
上記バイナリを解凍してできたフォルダvelocity-tools-x.xを、以降「%VELOCITY%」と呼ぶことにします。まずは、必要なjarファイルをクラスパスへ通します。「%VELOCITY%\lib」フォルダ配下にある、velcity-tools-x.x.jarとvelocity-dep-x.x.x.jarとを、Webアプリケーション・ルート配下の「WEB-INF\lib」フォルダにコピーしてください。
(2)web.xmlへVelocityViewServletを配備
続いて、Webアプリケーションのweb.xmlへVelocityViewServletサーブレットを配備します。このサーブレットは、VelocityテンプレートへのリクエストをVelocityエンジンに処理させるためのものです。web.xmlへ、以下の記述を追記します。
| web.xml |
<?xml version="1.0" encoding="UTF-8"?> |
初期化パラメータについてですが、「org.apache.velocity.toolbox」パラメータには、Velocity道具箱(後述)の設定ファイルの場所を指定します。「org.apache.velocity.properties」パラメータには、Velocity設定ファイルの場所(後述)を指定します。
(3)Velocity設定ファイルの用意
次に、Velocity設定ファイルvelocity.propertiesを用意します。これは、Velocityエンジンの動作を制御するための設定ファイルですが、これを用意しなくても、Velocityエンジンはデフォルトの設定で動作します。ファイルの設置場所は、上のweb.xmlで指定した場所(「/WEB-INF/velocity.properties」)です。
| velocity.properties |
runtime.log=velocity.log |
Velocityで設定可能なプロパティは多岐にわたるので、ここですべてを紹介することはできません。また、設定されていないプロパティについては、デフォルト値が採用されるので、必要なプロパティを設定するだけで大丈夫です。ここでは、ログの出力ファイル名(runtime.logプロパティ)、ログ・システムの実装クラス(runtime.log.logsystem.classプロパティ)、入力されるテンプレートの文字エンコード(input.encodingプロパティ)、出力される結果の文字コード(output.encodingプロパティ)を設定しておきます。
設定可能なすべてのプロパティを知りたければ、公式サイトにある「Developer's Guide」の「10. Velocity Configuration Keys and Values」を参照してください。
(4)Velocity道具箱設定ファイルの用意
最後に、Velocity道具箱設定ファイルvelocity-toolbox.xml(注)を用意し、web.xmlで指定した場所(「/WEB-INF/velocity-toolbox.xml」)へ設置します。この設定ファイルは、すべてのテンプレートで暗黙に利用できる、プリミティブ値やオブジェクトの入った変数を、登録しておくためのものです。そのため、この設定ファイルは「道具箱」と呼ばれるのです。
| velocity-toolbox.xml |
<?xml version="1.0"?> |
上のサンプルでは、数値型のプリミティブ値versionと、日付ツールDateToolのオブジェクトdateとを登録しています。これらは、テンプレート中で「$version」「$date」などと書くことで、アクセスできるようになります。
velocity-toolbox.xmlで記述される要素とその説明を以下の表にまとめます。
| 要素 | 親要素 | 説明 |
| <toolbox> | - | 文書ルート |
| <data> | <toolbox> | 数値/真偽値/文字列などのデータの登録。type属性に、number/boolean/stringのいずれかを指定 |
| <tool> | <toolbox> | オブジェクトの登録 |
| <key> | <data>、<tool> | テンプレートで参照するための変数名 |
| <value> | <data> | データの値 |
| <class> | <tool> | オブジェクトのクラス |
| <scope> | <tool> | オブジェクトの生存期間。application/session/requestのいずれかを指定可能 |
以上で設定は完了です。
■サンプル実行
以下のサンプル・テンプレートをWebアプリケーション・ルート直下に置き、ブラウザからアクセスしてみましょう。
| sample.vm |
<html> |
以下のような表示が得られれば、Velocityは正常に動作しています。
![]() |
| 「Java TIPS」 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

