Javaテンプレートエンジン:jsp、freemarker、velocityの違い

4168 ワード

Javaの分野では、表現層技術は主に3種類ある:jsp、freemarker、velocity.jspは皆さんが最もよく知っている技術の長所です:1、機能が強く、javaコードを書くことができます2、jspラベル(jsp tag)をサポートします3、表現言語(el)4をサポートします、公式の標準、ユーザー群が広くて、豊富な第三者jspラベルライブラリ5、性能が良好です.jspはclassファイルにコンパイルして実行して、とても良い性能の表現の欠点があります:jspは明らかな欠点がなくて、骨を選ばなければなりませんそれはjavaコードを書くことができるため、例えばmvc構造を破壊しやすいです.velocityはjspの代わりに早く登場したテンプレート言語の利点である:1、javaコードを書くことができず、厳格なmvc分離を実現することができ、2、性能が良好で、jspよりも性能が良いと言われている3、式言語を使用し、jspの式言語はvelocityを学ぶ欠点だと言われている:1、公式標準ではない2、ユーザーグループと第三者ラベルライブラリはjspが多くない.3、jspラベルのサポートが不十分freemarkerの利点:1、javaコードを書くことができなくて、厳格なmvc分離を実現することができます2、性能はとても悪くありません3、jspラベルのサポートに対して良好です4、大量の常用機能を内蔵して、使用はとても便利です5、マクロ定義(jspラベルのようです)はとても便利です6、使用式言語の欠点:1、公式基準ではありません
2、ユーザーグループと第三者ラベルライブラリはjspが多くない
freemarkerを選択した理由:1、パフォーマンス.velocityが最も良いはずで、次はjspで、普通のページfreemarkerの性能が最も悪い(数ミリ秒から十数ミリ秒の差だが).しかし、複雑なページ(大量の判断、日付金額のフォーマットを含む)では、freemarkerの性能はtagやelのjspを使うよりも優れている.2、マクロ定義はjsp tagより便利3、多くの常用機能を内蔵している.例えばhtmlフィルタリング、日付金額フォーマットなど、使い勝手が非常に便利4、jspタグ5をサポート、厳格なmvc分離を実現
 
=====================================================================================================
FreeMarkerと比較すると、Velocityはより簡単で軽量級ですが、その機能はFreeMarkerほど強くありません.
ほとんどのアプリケーションでは、FreeMarkerを使用するのはVelocityよりも簡単です.Velocityはカスタムtoolboxクラスを作成し、汎用的なテンプレートコードを繰り返し作成する必要があるため、開発を開始したばかりの頃よりも貴重な時間を失うことになります.また、ツールクラスとトランスフォームを使用する方法は、テンプレートエンジンでは非常に効果的な方法ではないようです.また、Velocityのアプローチにより、VelocityのテンプレートでJavaオブジェクトと大量にインタラクティブになります.これは簡単な原則に反します.コードをコントローラに転送して実現することもできますが.もちろん、VelocityのようにFreeMarkerを使用する場合は、FreeMarkerもVelocityと同じように簡単です.
VelocityがFreeMarkerより優れているのは、サードパーティのサポートが広く、非常に膨大なユーザーコミュニティがあることです.このコミュニティを通じて多くの助けを得ることができます.反対に、FreeMarkerはこの面で多くの差があります.もちろん、FreeMarkerをサポートするサードパーティ製ソフトウェアも増えています.
次はFreeMarkerではできますが、Velocityではできない機能のリストです(見てください):
1.日付と数値のサポート整数ではなく、任意の数のタイプに対して、任意の精度タイプを含む演算と比較を実行できます.日付/時刻の値を比較および表示(フォーマット)できます.
2.国際化デジタル領域、様々な組み込みおよびカスタムデジタルフォーマットモードを使用できます.日付領域とタイムゾーン、さまざまな組み込みおよびカスタマイズされた日付フォーマットモードをフォーマットできます.識別子(変数名)は、英語以外のアルファベットのようなアクセントアルファベット、アラビアアルファベット、漢字などを含むことができる
3.ループ処理ループを終了する制御変数外ループ機構の内部ループにアクセスし、ループの終了位置に現在到達しているかどうかを知ることができます.
4.テンプレートレベルの配列処理[i]の構文を使用して配列要素にアクセスできます.元の指数と元の指数ではない指数を含めて、配列の長さを取得できます.
5.マクロ定義マクロ呼び出し位置または名前でパラメータを渡すことができるマクロのパラメータはデフォルト値を設定することができ、マクロを呼び出すときにそのパラメータが指定されていない場合は、デフォルト値の代わりにデフォルト値を使用します.  body@myMacro>
“ ”

( Velocity #local , )

6.ネーミングスペース複数のネーミングスペースの変数を使用できます.マクロ・ライブラリを作成するときに便利です.名前が特定の変数または他のマクロ変数を申請するライブラリと競合することを防止できます.
7.Java言語に関係のない文字列、リスト、Mapを内蔵する操作方法
8.テンプレートのスペルミスやその他のエラーを提示できます.存在しない変数にアクセスすると、FreeMarkerはそのテンプレートを実行するときにエラーを報告します.構成を通じて、FreeMarkerがこのようなエラーに遭遇したときに実行を停止するか、またはエラーを無視するかを指定できます.同時に、FreeMarkerはログにこの問題を記録します.エラーコマンドの名前を入力すると、FreeMarkerは例外を放出します.
9.より高度なテキスト出力ツールYou can enclose a block of template in a set of tags that will cause it to apply HTML escaping or XML escaping(or any other transformation you can express as a FreeMarker expression for that matter)on all interpolations(${foo})in the block.FreeMarker has transforms, which are blocks of template that when rendered, go through a transforming filter. Built-in transforms include whitespace compressor, HTML and XML escaper. Best of all, you can implement your own transformers as well (i.e. if you generate Java source code, you can write a Java code pretty-printer transform and insert it into the template). Naturally, transforms can be nested.You can explicitly flush the output writer with a built-in flush-directive.You can stop the rendering with a built-in stop-directive.
10.テキスト処理はJavaの特殊文字処理をサポートする.例えばb、 \t, , \f, \r, \", \', \\,通常の文字列、数字、ブール定数を除いて、UNICODEのxXXXXはリストと地図の文字と内部テンプレートを定義することができます.
11.高度なスペースクリアFreeMarkerは、余分なスペース、ジャンプ、改行などの文字を削除し、煩わしい明らかな余分なスペースを削除します.FreeMarkerも、より多くのスペースを削除するコマンドを提供します.
12.他の技術との統合によりJSPタグライブラリを提供し、JSPにFreeMarkerテンプレートを埋め込むことでPythonオブジェクトと直接作業できる
13.より強力なXML変換機能
14.先進的なテンプレートメタプログラムでは、テンプレート定義のように、出力された任意の部分のサンプルバックグラウンド変数をキャプチャできます.
終了:
機能が強いかどうかは最も重要ではありません.肝心なのはあなたの要求に適応するかどうかです.
転載先:https://www.cnblogs.com/wdh1995/p/7076933.html