Javaテンプレートの技術を身につける--Velocity
5278 ワード
元のプロジェクトでは基本的にJSP+Tagで内容を展示していましたが、Jasper Reportでレポートを作ることもあり、レポートもテンプレート技術ですが、ヘビー級です.Springの本を読んだことがあって、いずれもVelocityとFreeMakerに対して紹介があって、私を牽引して以前見た*.vmファイルの研究に対して日程を上げて、理解した後に、すでに恨みを抱いて遅いと感じました.
以下、Velocityを利用して、現在のプロジェクトの簡単な問題をどのように解決するかを説明します.システムは支払いを行った後、自分で設定した情報テンプレートに従って責任者にメールを送信します.情報テンプレートは次のとおりです.
{文書責任者}:あなたの{文書番号}番号{文書タイプ}は{操作日}日に支払われました
従来の処理方式は,プログラムで上で定義したテンプレートを何度も前括弧を含むreplaceAll()を実データとして取得する.
このような情報テンプレートが多ければ、処理はコードを繰り返しています.
Velocityを利用して上記の問題をどのように簡潔に処理するかを紹介します.Velocityはhttp://velocity.apache.org/でダウンロードできます.velocity-1.5.zip(ペンを引くときのバージョンは1.5)があります.velocity-1.5.jarと依存パッケージ(libディレクトリ)があります.例では、クラスパスからテンプレートをロードします.具体的な手順は、次のとおりです.
一:テンプレートファイルの定義helloVelocity.vm(クラスパスの下に置く)
最初はvelocityテンプレートのコメントで、Velocity.INPUT_とENCODING対応で、helloVelocity.vmはGBK文字セットで保存するように要求されます.そうしないと、文字化けします.
二:テンプレートをロードし、値を入力し、出力します.HelloVelocity.javaのコードは次の通りです.
01.package com.unmi.velocity; 02. 03.import java.io.*; 04.import java.text.*; 05.import java.util.*; 06. 07.import org.apache.velocity.*; 08.import org.apache.velocity.app.*; 09. 10.public class HelloVelocity { 11. public static void main(String[] args) throws Exception { 12. // 初期化パラメータの設定 13. Properties props = new Properties(); 14. props.setProperty(Velocity.INPUT_ENCODING, "GBK"); 15. props.setProperty(Velocity.RESOURCE_LOADER, "class"); 16. props.setProperty("class.resource.loader.class", 17. "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 18. 19. // Velocityエンジンの初期化と取得 20. VelocityEngine ve = new VelocityEngine(props); 21. 22. // velocityのテンプレートを取得 23. Template template = ve.getTemplate("helloVelocity.vm"); 24. 25. // Templateインスタンスの取得方法は、次の2行のコードを使用することもできます. 26. // Velocity.init(props); 27. // Template template = Velocity.getTemplate("helloVelocity.vm"); 28. 29. // velocityのコンテキストcontextを取得 30. VelocityContext context = new VelocityContext(); 31. 32. // データをコンテキストに埋め込む 33. context.put("owner", "Unmi"); 34. context.put("bill", "1000"); 35. context.put("type", 「請求書」); 36. context.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 37. .format(new Date())); 38. 39. // 出力ストリームは、どこに出力するかを自由に制御できます.String、File、Socket など 40. Writer writer = new PrintWriter(System.out); 41. 42. // 変換出力 43. template.merge(context, writer); 44. writer.flush(); 45. } 46.}
以上のコードの実行結果は、コンソールの下でUnmiを出力します.1000番の請求書は2007-06-04 21:56:13に支払われました.
OK、コードははっきりしていると言えるでしょう.テンプレートのロード->値の塗りつぶし->テンプレートの出力内容のマージ.これがテンプレート技術が行うべきことです.上で紹介したのはClasspathResourceLoader方式でテンプレートをロードすることです.Velocityは他にもいくつかのResourceLoader:DataSourceResourceLoader,FileResourceLoader,JarResourceLoader,StringResourceLoader,URLResを提供しています.ourceLoader.名前からテンプレートをロードする方法を知ることができ、プロジェクトで独自のResourceLoaderを柔軟に選択できます(Velocityエンジンの初期化パラメータを構成します).
Velocityのデフォルト設定はvelocity.jarのorg/apache/velocity/runtime/defaults/velocity.propertisです.このファイルを修正してニーズに合ったものにすることができます.これにより、VelocityEngineの初期化パラメータPropertiesを構成する必要はありません.もちろん、上記は非常に簡単な例ですが、このような機能を完了するだけでは、広く使われていないに違いありません.Velocityはまた、VTL(Velocity Template Language)と呼ばれる定義を提供する.のものは、#if、#foreach、#set、#include、#parse、#macroなどの文法をサポートし、より複雑なデータ8028を処理することができます.詳細な文法はVelocityユーザーズマニュアルを参照してください.あなたが望む機能のより完璧なテンプレートを定義することができます.彼はjspの代わりにviewとして使用することができます.もちろん、定義されたVTLは学習者に多くの難易度を増加させましたが、本当に好きになったら、これらはすべて問題にならない.
Velocity Eclipseプラグインがあり、Updates Siteをhttp://propsorter.sourceforge.net/veloeclipseに設定してダウンロードまたは更新することができ、Eclipseでvmファイルを編集するのに便利です.
Velocityは、テンプレートの自動化生成コードを定義したり、私のBlog上のすべてのログをテンプレートに基づいてrss.xmlファイルを生成したりして、Springと組み合わせて使用するなど、簡単に解決できる問題を考えてみてください.http://velocity.apache.org/のanakia/texen/velocity-toolsは、Velocityのためにより多くの機能を拡張しています.
参照と適用: 1. JavaのテンプレートエンジンVelocity初体験 2. StrutsとVelocityの統合 3. Velocityユーザーズマニュアル 4. テンプレート:velocityとfreemarkerの比較 5. メール送信機能のテンプレート実装 6. Velocity改造心得
以下、Velocityを利用して、現在のプロジェクトの簡単な問題をどのように解決するかを説明します.システムは支払いを行った後、自分で設定した情報テンプレートに従って責任者にメールを送信します.情報テンプレートは次のとおりです.
{文書責任者}:あなたの{文書番号}番号{文書タイプ}は{操作日}日に支払われました
従来の処理方式は,プログラムで上で定義したテンプレートを何度も前括弧を含むreplaceAll()を実データとして取得する.
このような情報テンプレートが多ければ、処理はコードを繰り返しています.
Velocityを利用して上記の問題をどのように簡潔に処理するかを紹介します.Velocityはhttp://velocity.apache.org/でダウンロードできます.velocity-1.5.zip(ペンを引くときのバージョンは1.5)があります.velocity-1.5.jarと依存パッケージ(libディレクトリ)があります.例では、クラスパスからテンプレートをロードします.具体的な手順は、次のとおりです.
一:テンプレートファイルの定義helloVelocity.vm(クラスパスの下に置く)
1.
## { }: { } { } { }
2.
${owner}: ${bill} ${type} ${ date }
最初はvelocityテンプレートのコメントで、Velocity.INPUT_とENCODING対応で、helloVelocity.vmはGBK文字セットで保存するように要求されます.そうしないと、文字化けします.
二:テンプレートをロードし、値を入力し、出力します.HelloVelocity.javaのコードは次の通りです.
01.package com.unmi.velocity; 02. 03.import java.io.*; 04.import java.text.*; 05.import java.util.*; 06. 07.import org.apache.velocity.*; 08.import org.apache.velocity.app.*; 09. 10.public class HelloVelocity { 11. public static void main(String[] args) throws Exception { 12. // 初期化パラメータの設定 13. Properties props = new Properties(); 14. props.setProperty(Velocity.INPUT_ENCODING, "GBK"); 15. props.setProperty(Velocity.RESOURCE_LOADER, "class"); 16. props.setProperty("class.resource.loader.class", 17. "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 18. 19. // Velocityエンジンの初期化と取得 20. VelocityEngine ve = new VelocityEngine(props); 21. 22. // velocityのテンプレートを取得 23. Template template = ve.getTemplate("helloVelocity.vm"); 24. 25. // Templateインスタンスの取得方法は、次の2行のコードを使用することもできます. 26. // Velocity.init(props); 27. // Template template = Velocity.getTemplate("helloVelocity.vm"); 28. 29. // velocityのコンテキストcontextを取得 30. VelocityContext context = new VelocityContext(); 31. 32. // データをコンテキストに埋め込む 33. context.put("owner", "Unmi"); 34. context.put("bill", "1000"); 35. context.put("type", 「請求書」); 36. context.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 37. .format(new Date())); 38. 39. // 出力ストリームは、どこに出力するかを自由に制御できます.String、File、Socket など 40. Writer writer = new PrintWriter(System.out); 41. 42. // 変換出力 43. template.merge(context, writer); 44. writer.flush(); 45. } 46.}
以上のコードの実行結果は、コンソールの下でUnmiを出力します.1000番の請求書は2007-06-04 21:56:13に支払われました.
OK、コードははっきりしていると言えるでしょう.テンプレートのロード->値の塗りつぶし->テンプレートの出力内容のマージ.これがテンプレート技術が行うべきことです.上で紹介したのはClasspathResourceLoader方式でテンプレートをロードすることです.Velocityは他にもいくつかのResourceLoader:DataSourceResourceLoader,FileResourceLoader,JarResourceLoader,StringResourceLoader,URLResを提供しています.ourceLoader.名前からテンプレートをロードする方法を知ることができ、プロジェクトで独自のResourceLoaderを柔軟に選択できます(Velocityエンジンの初期化パラメータを構成します).
Velocityのデフォルト設定はvelocity.jarのorg/apache/velocity/runtime/defaults/velocity.propertisです.このファイルを修正してニーズに合ったものにすることができます.これにより、VelocityEngineの初期化パラメータPropertiesを構成する必要はありません.もちろん、上記は非常に簡単な例ですが、このような機能を完了するだけでは、広く使われていないに違いありません.Velocityはまた、VTL(Velocity Template Language)と呼ばれる定義を提供する.のものは、#if、#foreach、#set、#include、#parse、#macroなどの文法をサポートし、より複雑なデータ8028を処理することができます.詳細な文法はVelocityユーザーズマニュアルを参照してください.あなたが望む機能のより完璧なテンプレートを定義することができます.彼はjspの代わりにviewとして使用することができます.もちろん、定義されたVTLは学習者に多くの難易度を増加させましたが、本当に好きになったら、これらはすべて問題にならない.
Velocity Eclipseプラグインがあり、Updates Siteをhttp://propsorter.sourceforge.net/veloeclipseに設定してダウンロードまたは更新することができ、Eclipseでvmファイルを編集するのに便利です.
Velocityは、テンプレートの自動化生成コードを定義したり、私のBlog上のすべてのログをテンプレートに基づいてrss.xmlファイルを生成したりして、Springと組み合わせて使用するなど、簡単に解決できる問題を考えてみてください.http://velocity.apache.org/のanakia/texen/velocity-toolsは、Velocityのためにより多くの機能を拡張しています.
参照と適用: 1. JavaのテンプレートエンジンVelocity初体験 2. StrutsとVelocityの統合 3. Velocityユーザーズマニュアル 4. テンプレート:velocityとfreemarkerの比較 5. メール送信機能のテンプレート実装 6. Velocity改造心得