Velocity を使ってみよう(後編)
いよいよプログラム本体です。
package jp.mydns.akanekodou; import java.io.StringWriter; import java.util.List; import java.util.ArrayList; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import java.sql.*; import jp.mydns.akanekodou.bean.*; public class Products { public static void main(String[] args) { String DBSERVER = "jdbc:mysql://localhost:3306/menudb"; String USER = "scott"; String PASSWD = "tiger"; try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(DBSERVER,USER,PASSWD); Statement stmt = con.createStatement(); String query = "SELECT * FROM 商品マスタ"; ResultSet rs = stmt.executeQuery(query); List<Product> list = new ArrayList<Product>(); while(rs.next()) { Product p = new Product(); p.setId(rs.getInt("商品ID")); p.setName(rs.getString("商品名")); list.add(p); } rs.close(); stmt.close(); con.close(); Velocity.init(); VelocityContext vc = new VelocityContext(); vc.put("list",list); StringWriter sw = new StringWriter(); Template template = Velocity.getTemplate("template/products.vm"); template.merge(vc, sw); System.out.println(sw.toString()); sw.close(); } catch(Exception e) { e.printStackTrace(); } } }
前半はデータベースに接続してデータを取得してくる部分です。変数 list に List<Product> 型のリストが出来上がります。
後半が Velocity によるテンプレートへのデータの差し込みです。init メソッドで初期化をし、VelocityContext を用意します。そこに list という名前で先ほど作った list を渡します。put の第一引数の "list" はテンプレートで使った $list に対応します。次に StringWriter を用意します。テンプレートを指定し、merge でテンプレートにデータを流し込んでいます。これで sw にはデータが流し込まれた状態で出力が格納されていますので String に変換して println で出力します。
で、出力はこうなるわけですが。
1 : デスクトップ型パソコン 2 : ノート型パソコン 3 : 17型_ディスプレイ 4 : 19型_ディスプレイ 5 : 15型_液晶ディスプレイ 6 : デジタルカメラ 7 : プリンタ 8 : スキャナ 9 : HUB 10 : ターミナルアダプタ
何かこれだと、Velocity のありがたみが良くわからないですね。しかし、重要なのはそこではありません。
テンプレートを利用する最大の利点は「テンプレートを見れば出力が大体想像がつく」ことにあります。再び年賀状の例を思い出してください。テンプレートが用意されていることにより、宛名がどのように印刷されるのか、大方予想がつきますよね。それこそがテンプレートエンジンを採用する最大の利点なのです。
JSP & Servlet にしろ Struts にしろ、View を作るには JSP を利用します。これは JSP 式やカスタムタグが含まれているので、そのままでは出力を予想するのは知識のない人には困難です。
そこで、View の部分を Velocity で作る、という方法を取ることがあります。Velocity Tools には独自の Servlet が用意されていて、テンプレートである vm ファイルを変換してデータを差し込むことができます。そして vm ファイルは jsp ファイルと比較するとより HTML に近いので、知識が少ない人でも出力が予測しやすいという利点があります。MVC モデルのコンセプトであった「分業」がよりやりやすくなるわけです。
さらに Velocity は Google App Engine や Android などでも利用できることを考えると、使い方を覚えて損はないテクノロジーであると言えます。