【Java】【Velocity】Apache Velocity ~入門編~

■ Velocityとは

 * Java ベースのテンプレートエンジン
  ※テンプレートエンジン:プログラムで変更する部分と、 雛形となるドキュメントのテンプレートを別々に扱う仕組み
 * JSPのようにTomcatのようなアプリケーションサーバからだけでなく、どこでも使える
 * 元は、Apache Turbineのサブ・プロジェクト(Apache Turbineについては、以下の関連記事を参照のこと)
http://blogs.yahoo.co.jp/dk521123/34032696.html

■ 構成

 * テンプレートファイル(xxx.vm)
 * 実行するJavaソース
 * Java Bean
http://www.techscore.com/page_attachments/0000/0621/velocity1-1.gif

■ 環境設定

【1】モジュールを直接ダウンロード
【2】 Gradleを使う

【1】モジュールを直接ダウンロード

 [1] 以下のダウンロード先から「velocity-X.X.zip」(今回「velocity-1.7.zip」)を落としてきて、解凍する
http://velocity.apache.org/download.cgi
 [2] ダウンロードしたファイルから「velocity-X.X-dep.jar」を取り出し、Eclipseの対象プロジェクトに追加する

補足:velocity-X.X-dep.jarについて

http://www.jajakarta.org/velocity/velocity-1.4/docs-ja/developer-guide.html
より、抜粋
~~~~~~~
jar-dep bin ディレクトリに Velocity の完全版の jar ファイルを構築します。
この jar ファイルには、 Jakarta Avalon Logkit パッケージによるロギングに必要なサポートや、
 Jakarta Commons による重要な設定のサポートや、 Jakarta ORO パッケージを使った WebMacro テンプレート変換に
必要なサポートが含まれています。
~~~~~~~
 => つまり、依存関係のあるツールも含まれたJARファイル。

※ このdep のJARファイルでトラブった。内容は以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/36797095.html

【2】 Gradleを使う

build.gradle
dependencies {
    compile group: 'org.apache.velocity', name: 'velocity', version: '1.7'
}
https://mvnrepository.com/artifact/org.apache.velocity/velocity/1.7

■ サンプル

 * すごい簡単できた!!!

SampleTemplete.vm

$msgBean.userName 様
                                       $msgBean.date
 この度はお買い上げ頂き、誠にありがとうございます。

【商品】
商品ID : $msgBean.productId
商品名   : $msgBean.productName
価格       : $msgBean.price

以上

VelocitySample.java

package com.sample.velocity;

import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class VelocitySample {
   private static String TEMPLATE_FILE_DIRECTORY = 
         "C:/Develop/workspace/SampleJavaCodes/templates";
   
   public static void main(String[] args) {
      StringWriter writer = new StringWriter();
      SampleMessageBean MessageBean =
            new SampleMessageBean("Mike", "2015-01-08", "111-222", "Java Program Book", 1000);

      try {
         Velocity.setProperty("file.resource.loader.path",
               TEMPLATE_FILE_DIRECTORY);
         Velocity.init();

         // VelocityContext:テンプレートにセットする値を管理するためのオブジェクト
         VelocityContext context = new VelocityContext();
         context.put("msgBean", MessageBean);

         // テンプレート:テキスト形式のファイル(拡張子:VM)
         Template template = Velocity.getTemplate("SampleTemplete.vm", "MS932");
         // アプリケーション内にて、vmファイルとVelocityContextを結合し、writerに出力する
         template.merge(context, writer);
      } catch (Exception ex) {
         ex.printStackTrace();
      }

      System.out.println("[出力結果]");
      System.out.print(writer.toString());
   }
}

SampleMessageBean.java

package com.sample.velocity;

public class SampleMessageBean {
   private String userName;
   private String date;
   private String productId;
   private String productName;
   private int price;

   public SampleMessageBean(
         String userName, String date,
         String productId, String productName, int price) {
      this.userName = userName;
      this.date = date;
      this.productId = productId;
      this.productName = productName;
      this.price = price;
   }

   public void setUserName(String userName) {
      this.userName = userName;
   }

   public String getUserName() {
      return userName;
   }

   public String getDate() {
      return date;
   }

   public void setDate(String date) {
      this.date = date;
   }

   public String getProductId() {
      return productId;
   }

   public void setProductId(String productId) {
      this.productId = productId;
   }

   public String getProductName() {
      return productName;
   }

   public void setProductName(String productName) {
      this.productName = productName;
   }

   public int getPrice() {
      return price;
   }

   public void setPrice(int price) {
      this.price = price;
   }
}
出力結果
[出力結果]
Mike 様
                                       2015-01-08
 この度はお買い上げ頂き、誠にありがとうございます。

【商品】
商品ID : 111-222
商品名   : Java Program Book
価格       : 1000

以上


関連記事

Apache Velocity関連

Apache Velocity ~入門編~
https://blogs.yahoo.co.jp/dk521123/34456704.html
Apache Velocity ~VTL(Velocity Template Language)編~
https://blogs.yahoo.co.jp/dk521123/34463879.html
Velocity を Servlet で使用するには
https://blogs.yahoo.co.jp/dk521123/34460303.html
Velocityを利用してメールテンプレート機能の実装を考える [1]
https://blogs.yahoo.co.jp/dk521123/36245554.html
Velocityを利用してメールテンプレート機能の実装を考える [2]
https://blogs.yahoo.co.jp/dk521123/36246607.html
JARファイル内のリソースファイルを開いてApache Velocityを使って文字列取得
https://blogs.yahoo.co.jp/dk521123/37515809.html
Velocity に関するトラブルシューティング
https://blogs.yahoo.co.jp/dk521123/36257386.html

その他関連記事

Apache Turbine
https://blogs.yahoo.co.jp/dk521123/34032696.html
【トラブル】【Java】Commons インポートしてるけど、ClassNotFoundExceptionが発生する
https://blogs.yahoo.co.jp/dk521123/36797095.html
Java での リソース の扱いについて
https://blogs.yahoo.co.jp/dk521123/37497699.html