Velocity の名前の直訳は、速度、速度、迅速さです。しかし、Struts について基本的に知っている人や使用している人はほとんどいません。 Struts 関連ですが、Velocity についてどう思いますか?ここでの紹介を通じて、誰もがプロジェクト開発を選択する際に Velocity を検討し、その考え方を理解できるように、ここでの紹介を通じて Velocity の概念を理解してみましょう。とても良い考え方で、誰もが気分を変え、違った考え方をすることができます。
この記事は、読者が Java 開発の一定の基礎を持ち、MVC、Struts、およびその他の開発モデルを理解しているという事実に基づいています。
Velocity は Java テンプレート エンジン テクノロジであり、Apache によって提案され、別のエンジン テクノロジである Webmacro から派生しました。それでは、ベロシティの正式な定義は何でしょうか? Apache はこれを Java ベースのテンプレート エンジンと定義していますが、誰でもシンプルで強力なテンプレート言語を使用して Java コードで定義されたオブジェクトを参照できるようにします。最新バージョンは 1.4 です。詳細については、 http://jakarta.apache.org/velocity/index.htmlを参照してください。
実際、率直に言うと、Velocity は MVC アーキテクチャの実装ですが、モデルとビューの間のブリッジとしての関係に重点を置いています。 MVC の最も人気のあるアーキテクチャである Struts については誰もがよく知っていると思いますが、IBM の Websphere 5 以降の管理プラットフォーム バージョンを含む Struts アーキテクチャは、MVC の優れた実践例であり、Java の使用量を効果的に削減します。コードは View (Jsp) に表示されますが、Model と View の間の接続は依然として Struts の Taglib テクノロジに依存しています。フロントエンド Web デザイナーが Struts や Taglib にさえ慣れていない場合を想像してみてください (慣れるのは非常に難しいと思います)。実際の開発においては、Web デザイナーとフロントエンド開発エンジニアが連携することが非常に難しいという現状があります。フロントエンド開発者はさらに複雑になる可能性がありますが、この問題を最大限に解決するにはどうすればよいでしょうか。 Velocity またはこの概念を見てみましょう。
Velocity がどのように機能するかを示すために、最も単純な Velocity 開発例から始めましょう。
1. ファイルを作成します。ファイル名は hellavelocity.vm、速度テンプレート (実際には html と同じ)、内容は次のとおりです。
$name さん、Javayou.com へようこそ!
今日は$dateです。
2. 次の内容を含む Java ファイル HelloVelocity.java を作成します。
パッケージcom.javayou.velocity;
インポートjava.io.StringWriter;
java.util.* をインポートします。
org.apache.velocity.app.VelocityEngine をインポートします。
org.apache.velocity.Template をインポートします。
org.apache.velocity.VelocityContext をインポートします。
/**
* @author Liang.xf 2004-12-14
*/
パブリック クラス HelloVelocity {
public static void main(String[] args) throws Exception {
//Velocity エンジンを初期化して取得します
VelocityEngine ve = new VelocityEngine();
ve.init();
//速度テンプレートを取得する
テンプレート t = ve.getTemplate("hellovelocity.vm");
//速度のコンテキストを取得する
VelocityContext コンテキスト = new VelocityContext();
// データをコンテキストに埋め込む
context.put("名前", "梁");
context.put("日付", (new Date()).toString());
//後で表示する場合は、リストの値を事前に入力してください
リスト一時 = 新しい ArrayList();
temp.add("1");
temp.add("2");
context.put("リスト", temp);
//出力ストリーム
StringWriter ライター = new StringWriter();
//出力を変換する
t.merge(コンテキスト、ライター);
System.out.println(writer.toString());
}
}
3. http://jakarta.apache.org/site/binindex.cgiで Velocity 1.4 zip をダウンロードし、解凍して Velocity-1.4.jar を取得し、それを使用して上記のクラス HelloVelocity.java をコンパイルします。
4. 1 の hellavelocity.vm を実行の現在のディレクトリにコピーします。HelloVelocity を実行するには、ダウンロードした Velocity1.4.zip、 \velocity - 1.4\build\lib から取得できる他のパッケージも必要です。 commons-collections.jar と logkit-1.0.1.jar を導入した後、クラスがコンパイルされていることを前提として、 java -cp .\bin; -Djava.ext.dirs=.\lib2 com.javayou.velocity.HelloVelocity を実行します。 .\ bin ディレクトリにコピーし、必要なクラス パッケージは .\lib2 ディレクトリに配置します。実行中の構造は次のとおりです。
Liang さん、Javayou.com へようこそ!
今日は 2004 年 12 月 14 日火曜日 19:26:37 CST です。
上記は最も単純な実行結果です。hellavelocity.vm テンプレートで定義されている 2 つの変数 $name と $date はそれぞれ context.put("name", "Liang") と context.put です。 ( "date", (new Date()).toString()) は、設定された値に置き換えられます。
この観点から見ると、業務結果を含めたビジネスプロセスの処理は基本的にすべてモデル層で解決され、ビュー層は基本的に簡易なVTL(Velocity Template Language)を用いて表示されるだけとなります。このように考えると、Jsp は不要ではないでしょうか。はい、この使用モデルは以前の CGI メソッドに少し似ています:) Velocity はコードを自動的に出力します。Velocity はこの点でも多くのコードを生成するために使用されます。
Velocityでは変数定義は「$」で始まり、$がVelocityの識別子となります。文字、数字、ストローク、下線はすべて、Velocity で定義された変数として使用できます。
さらに、$student.No、$student.Address など、Velocity の特徴的な変数定義にも注意を払う必要があります。これらには 2 つのレベルの意味があります。1 つ目は、学生がハッシュテーブルの場合、キー No と will Address の値がハッシュテーブルから抽出されます。2 番目のタイプは、呼び出しメソッドである可能性があります。つまり、上記の 2 つの変数は、student.getNo() とstudent.getAddress() に変換されます。 Velocity には、サーブレット内の Java コードによって返される値のオブジェクトがあり、$student.getAddress() などのオブジェクトのメソッドを呼び出すこともできます。ここでは例を挙げて詳しく説明しません。
上記の例は単なる単純な例にすぎませんが、実際のアプリケーションでは、多くの場合、リスト リストやもちろん速度 (さらに、テンプレート内の変数 (Jsp の変数など) や、自動化を実現するためのマクロの作成など、より強力な表示もサポートしています。続けて読んでみましょう。
上記の例を引き続き使用し、 hellavelocity.vm テンプレートの内容を次のように変更します。
#set( $iAmVariable = "良い!" )
$name さん、Javayou.com へようこそ!
今日は$dateです。
$iAmVariable
上記の実行コマンドを再実行すると、結果は次のようになります。
Liang さん、Javayou.com へようこそ!
今日は 2004 年 12 月 14 日火曜日 22:44:39 CST です。
良い!
テンプレート内の変数が #set で始まるステートメントとして定義されていることがわかります。これは、実行後、テンプレート内の変数 $iAmVariable が定義された値に変換されることを理解するのは難しくありません。
良い!
hellavelocity.vm テンプレートの内容を次のように変更してみましょう。
#set ($admin = "管理者")
#set ($user = "ユーザー")
#if ($admin == $user)
管理者さん、ようこそ!
#それ以外
ユーザーさん、ようこそ!
#終わり
run コマンドを実行すると、結果は次のようになります。
ユーザーさん、ようこそ!
判定ステートメントは単純な #if ()、#else、#end だけであり、それほど複雑ではないことがわかります。
引き続き反復データを確認し、テンプレート hellavelocity.vm の内容を次のように変更しましょう。
#foreach( $list の $product )
$product
#終わり
run コマンドを実行すると、結果は次のようになります。
#1
#2
例ではVelocityContext Listにあらかじめ保存されている値を一覧表示するのが便利ではないでしょうか? #foreach ($variable in xx) を使用するだけです。上記のリストをハッシュテーブルに置き換える場合は、次の構文を使用できます。
#foreach($hashVariable.keySet() の $key )
$key の値: $ hashVariable.get($key)
#終わり
これらのスクリプトはまったく複雑ではないと思います。
多くの人は、「Javabean だったらどうなるの?」と尋ねるでしょう。さて、Bean を追加しましょう。
パッケージcom.javayou.velocity;
/**
* @author Liang.xf 2004-12-14
*/
公開授業 学生 {
//クラスの属性は public であることに注意してください
public String no = "";
パブリック文字列アドレス = "";
public Student(String _no, String _address) {
いいえ = _いいえ;
アドレス = _アドレス;
}
public String getAddress() {
返送先住所;
}
public void setAddress(文字列アドレス) {
this.address = 住所;
}
public String getNo() {
いいえを返します。
}
public void setNo(String no) {
this.no = いいえ;
}
}
この Student は完全な JavaBean (データ Bean) であり、データをロードするために使用される一般的なクラスです。次に、HelloVelocity.java を次のように変更します。
temp.add("1");
temp.add("2");
次のように置き換えます。
temp.add(新しい学生("123", "広州"));
temp.add(新しい学生("456", "珠海"));
次に、 hellavelocity.vm の内容を次のように変更します。
#foreach ($s の $students)
<$velocityCount> アドレス: $s.address
#終わり
run コマンドを再コンパイルして実行すると、結果は次のようになります。
<1> 住所:広州
<2> 住所:珠海
このようにして、リスト内の生徒データが印刷され、完了です。ここでは、Velocity の組み込み変数 $velocityCount が使用されます。これは、1 から始まります。0 に変更することもできますが、Velocity.properties で変更する必要があります。ディレクトリ org\apache\velocity \runtime\defaultsの下に、velocity-1.4.jar パッケージがあります。
より複雑な反復にどう対処するか?明確にするために、次のテンプレートの例を見てみましょう。
#foreach ($list の $element)
-- 内部 foreach --
#foreach ($list の $element)
これは$要素です。
$velocityCount
#終わり
-- 内部 foreach --
-- 外側の foreach --
これは$要素です。
$velocityCount
-- 外側の foreach --
#終わり
ご覧のとおり、Velocity はタグのネストをサポートしていますが、ここでは詳しく説明しませんので、興味がある方はぜひ試してみてください。
実際、先ほど挙げた例をもう少し詳しく考えてみると、Velocity が何に役立つのかがすでにわかるでしょう。それが Servlet + Velocity モデルです。また、初期の Jsp 開発モデル Jsp+JavaBean をまだ覚えていますか?ここでは、Servlet+JavaBean+Velocity に変更しました。Jsp+JavaBean を置き換え、さらに徹底的に Jsp (vm) から Java コードを削除しました。Struts (Servlet+Jsp) のみを使用する場合、コストは次のとおりです。 Java コードは常に多かれ少なかれ JSP 内に出現します。たとえ Java コードなしで実行できたとしても、複雑なアーキテクチャ システムを開発したことがある開発者は、コストも非常に高価であり、保守性の観点からも、統合開発には一定の困難があることを知っています。 Web デザイナーとの対話により、Servlet+JavaBean+Velocity モデルが OOD の概念をよりよく実現していることがわかります。効率の点では、この組み合わせはサーブレットと Jsp の方法よりも効率的です。
Velocity について学びたい人はたくさんいるはずですが、実際にプロジェクトに適用できる人は少ないかもしれません (Jute など、一部のプロジェクトではまだ使用されています)。結局のところ、Jsp は Jsp に比べて標準的で広く使用されています。 Jsp 開発をサポートする多くの開発ツールが使用されています。ただし、Velocity の機能は Jsp との競合に限定されません。前述したように、Turbine は、Velocity を使用して多くのコードを生成することもできます。これをコード ジェネレーターまたはその他のテンプレート生成に組み込むことは非常に良い考えです。
さて、Velocity を深く掘り下げてプロジェクトを実行したい場合に注意する必要がある一般的な問題をいくつか見てみましょう。1 つ目は国際化の問題です。
Velocity 自体は、テンプレートの国際エンコード変換をサポートしています。Velocity が提供するメソッドを見てください。
パブリック テンプレート getTemplate (Stirng テンプレート、文字列エンコーディング)、
このアプローチでは完全な国際化を達成できないと推測されます。
Struts での国際化の最も単純な概念は、Jsp で国際言語タグを使用することであり、各言語は異なる言語タグ ライブラリを使用します。つまり、実際には少しの手動処理が必要です。
幸いなことに、誰かがすでに上記の問題を解決し、国際化されたラベルを含めるための変数テキストを提供する Velocity のツール MessageTool を作成しました。この方法では、$text.get('title のようなラベル コードを記述するだけで済みます。 ' )、より具体的なコンテンツはhttp://jakarta.apache.org/velocity/tools/struts/MessageTool.htmlにもあります。
さて、これはすべて Velocity の紹介に基づくもので、他の拡張機能について話しましょう。 Velocity は標準的な MVC 構造ではない、とコメントする人もいます。最初に、Velocity は Model と View の優れた組み合わせにすぎないと言いましたが、結局のところ、MVC の優れた組み合わせはまだ確立されていません。結成されました。幸いなことに、Apache は Struts と Velocity の組み合わせに基づいて VelocityStruts を起動しました。この部分は後のトピックで紹介します。これは Struts の構造とビジネス ロジックのアクションに基づいています。最後に、ビジネス プロセスは Velocity に基づいて表示層に移行され、Jsp が View 層として置き換えられます。また、引用された例は基本的に原則とデモンストレーションに基づいており、Web 開発と密接に統合されていないことも上で見てきました。VelocityStruts の内容を説明する際には、この側面を組み合わせます。
Velocity の使用の概要 - Java のコード
1.まずオブジェクトを初期化します
VelocityContext コンテキスト = new VelocityContext();
StringWriter ライター = new StringWriter();
文字列エンコーディング2 = "GBK";
2.システムプロパティファイルのPROPERTY_PATH = TEMPLATE_INIT_PATH (速度に必要なプロパティファイルのパスを指定します。)
3.プロパティの内容
file.resource.loader.path = D:/resin/webapps/mip/files/templateupload/ (テンプレートがある場所)
4.次に、Velocity.init(PROPERTY_PATH) を初期化します。
5.速度のラベルを java context.put(key, value); に対応させます。
6.次に、ファイル Velocity.mergeTemplate(templateName,coding2,context,writer); をロードします。
7.最後に、Generator.writeToFile() を呼び出してファイルを生成します。
8. writeToFile 関数は次のとおりです。
FileOutputStream of = new FileOutputStream(theFile);
of.write(writer.toString().getBytes("GBK"));
// 文字列 tt = Writer.toString();
of.flush();
of.close();
この記事は CSDN ブログからのものです。転載する場合は出典を明記してください: http://blog.csdn.net/sunrui_work/archive/2009/12/18/5029982.aspx