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を利用します。導入のステップは、以下のとおりです。
- velocity-tools-x.x.jar、velocity-dep-x.x.x.jarを、Webアプリケーションのルート配下の「WEB-INF\lib」フォルダに入れる(xはバージョン番号)
- web.xmlにVelocityViewServletを配備し、「.vm」拡張子のリクエストとの関連付けを行う(注)
- Velocity設定ファイルvelocity.propertiesを用意する
- Velocity道具箱設定ファイルvelocity-toolbox.xmlを用意する
注:Velocityテンプレートの拡張子は、通常「.vm」になります。
まずは、以下のURLより、Velocity Toolsのバイナリ(velocity-tools-x.x.jarまたはvelocity-tools-x.x.tar.gz)をダウンロードしてください。
(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へ、以下の記述を追記します。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/ j2ee/web-app_2_4.xsd" version="2.4"> ……中略…… <servlet> <servlet-name>velocity</servlet-name> <servlet-class> org.apache.velocity.tools.view.servlet.VelocityViewServlet </servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/velocity-toolbox.xml</param-value> </init-param> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> ……中略…… <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping> ……中略…… </web-app>
初期化パラメータについてですが、「org.apache.velocity.toolbox」パラメータには、Velocity道具箱(後述)の設定ファイルの場所を指定します。「org.apache.velocity.properties」パラメータには、Velocity設定ファイルの場所(後述)を指定します。
(3)Velocity設定ファイルの用意
次に、Velocity設定ファイルvelocity.propertiesを用意します。これは、Velocityエンジンの動作を制御するための設定ファイルですが、これを用意しなくても、Velocityエンジンはデフォルトの設定で動作します。ファイルの設置場所は、上のweb.xmlで指定した場所(「/WEB-INF/velocity.properties」)です。
runtime.log=velocity.log runtime.log.logsystem.class=org.apache.velocity.runtime. log.AvalonLogSystem input.encoding=Windows-31J output.encoding=Windows-31J
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」)へ設置します。この設定ファイルは、すべてのテンプレートで暗黙に利用できる、プリミティブ値やオブジェクトの入った変数を、登録しておくためのものです。そのため、この設定ファイルは「道具箱」と呼ばれるのです。
注:公式サイトでは、toolbox.xmlというファイル名で扱われています。しかし、WEB-INFフォルダ以下に置かれる各種の設定ファイルは、フレームワークやコンポーネントを利用することで増えていく傾向にあり、メンテナンスが難しくなります。そのため、どの設定ファイルがどのフレームワークやコンポーネントに属するものかを、分かりやすくしておくことは重要です。本稿では、Velocity道具箱設定ファイルを、velocity-toolbox.xmlと命名することを推奨します。
<?xml version="1.0"?> <toolbox> <data type="number"> <key>version</key> <value>1.1</value> </data> <tool> <key>date</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.DateTool</class> </tool> </toolbox>
上のサンプルでは、数値型のプリミティブ値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アプリケーション・ルート直下に置き、ブラウザからアクセスしてみましょう。
<html> <body> #set($message = "Velocityが動作しています。") $message<br> Velocityのバージョン: $version<br> $date </body> </html>
以下のような表示が得られれば、Velocityは正常に動作しています。
Copyright © ITmedia, Inc. All Rights Reserved.