0

私はいくつかの php 開発を行いましたが、この言語の大きな傾向は、smarty やその他のテンプレート エンジンなどを使用することです。

通常、おおよそ次のように実行されます。

テンプレートを通常の文字列としてロードし、その {tag} を探して、各 {tag} を何らかのコードの結果に置き換えます。入力パラメーターを使用してページをキャッシュし、結果のページをレンダリングします。(テンプレートがオブジェクトになるなどのオブジェクト指向の原則を追加することもあります...)

jsp を見ると、スクリプトレット、taglibs などの複雑なものが使用されていることがわかります。

<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page import="ghhghjjgj"%>

それから :

<logic:if>some html </logic:if>

またはさらに悪い:

<%= if (blabal) {%>
some html
<%}else ...%>

など。

さて、タイルを使用すると、いくつかの jsp ページを一緒に接着することができます。これは非常に便利です (php のインクルードのように)

php のアプローチは、次の点ではるかに優れているように思えます。

  • GUI とモデルの処理を完全に分離します。
    -後ろの部分で作業しているときに、ページのコンテンツを変更するのは簡単です。% @ <%= のような複雑なものがない実際の Java クラスにいます。(誰がコード ビハインド アラ C# と言ったか ;) ?)

C# アプローチも非常に興味深いものですが、質問の中でテンプレート部分に対処したいだけで、C# 対 Java トロール戦争を開始したくありません。また、php の方が優れているとは言いたくありません。

Java に適切にインストールされたテンプレート エンジンがない理由と、まだ scriplets/taglibs を使用している理由を知りたいだけです。

だから私は何かが欠けているに違いないと思います。Java EE Web の専門家が私の推論の欠陥を教えてくれますか?

4

3 に答える 3

3

J2EE はずっと前に Java EE になりました。「2」を落とします。

スクリプトレットは使用しないでください。1999年の技術です。本で見た場合、それは本が古いためです。現在、別のサーブレット/JSP の本を書く正当な理由はあまりありません。

カスタムタグ ライブラリは支持されなくなりました。JSTL が標準です。それ以上必要になることはまずありません。

テンプレート化は一般的です - Velocityを見てください。私が取り組んでいる 1 つのプロジェクトでは、HTML をブラウザーにストリーミングするためだけに使用しています。

于 2012-06-20T09:30:14.560 に答える
0

Velocity など、Java 用のテンプレート エンジンは多数あります。JSP は Java バイトコードにコンパイルされます。これにより、非常に高速な実行が可能になります。この要素が重要かどうかは、タスクによって異なりますが、ほとんどの Web サイトのテンプレート処理は問題になりません。

于 2012-06-20T09:30:47.243 に答える
0

なぜ書くことが素晴らしいのか、その意味がよくわかりません

{if blabal} some html{/if} 

そして、書くのはあまり得意ではありません

<logic:if test="blabal"> some html</logic:if>

そして書くのはもっと悪い

<% if (blabal) { %> some html <% } %>

でも書いてて良かった

#if ( blabal )
    some html
#end

個人的には、Java でロジックを書くのが好きです。

  • タイプ保存
  • 構文を知っている

ただし、私にとっては、テンプレート コードとロジックを混在させることが良いか悪いかという構文の問題ではありません。したがって、私はSnippetoryを好みます。テンプレートの一貫性 ( ecapingなど)、外観 (書式設定など)、および国際化に対する責任を維持しながら、テンプレートからロジックを取得します。バインディング ロジックがテスト可能になり、整理と再利用が容易になります。データ モデルはそのまま使用でき、ある種のエイリアン テクノロジーに十分なモデルに変換する必要はありません。この場合、テンプレートは、コンテキストからセルフサービスするプロセスではなく、必要なデータをコピーする一種のモデルです。

さて、この場合、ソフトウェアをより保守しやすくするために関心の分離の原則を使用するときに常に発生するため、同じことを表現するためにソフトウェアの平和が必要になります。

テンプレート:

<t:named-region> some html with a {v:value} </t:named-region>

論理:

if (blabal) {
  template.get("named-region").set("value", value).render();
}

これを見ると、コードがかなり増えています。繰り返しますが、これは懸念のセパレーションに典型的です。ただし、手順をざっと見てみると、次のように理解できるかもしれません。

  1. リージョンへのアクセスが取得されます。
  2. データはテンプレートにバインドされます。これは、from を埋めるのと同じように、きめ細かく行われます。
  3. 完成したフォームは出力にバインドされます。

最後のステップは省略可能のようです。データを入れているので、使いたいのは明らかです。render()ただし、は のショートカットであることに注意する必要がありますrender(template, "named-region")。というわけで使い方の説明です。このメカニズムのおかげで、1 つのファイルまたは複数のファイルのビルディング ブロックを選択した出力に簡単に組み合わせることができます。これにより、これらのブロックを驚くほど便利に再利用できます。

html、css、および javaScript を適切に作成するために戦っているときに、「データにアクセスするための正確なパスはどのようになっているのか?」という問題に対処する必要はありません。または「このボタンが表示される正確なケースは何ですか?」。あくまで「理屈があるから名前がつく」くらいです。とてもシンプルで、とてもきれい。

もちろん、ビューに名前を付けるためだけに jByte (私はしばらく使用していました) や JTPL のように、テンプレートとロジックの分離をサポートするエンジンが他にもいくつかあります。ただし、どれも機能が不足しているように見えますが、Snippetory を作成することにしました。

于 2012-09-15T13:18:49.033 に答える