4

スクリプトレットの代わりにカスタムアクションを使用する利点(ある場合)は何ですか?

たとえば、パフォーマンスのコンテキストではどちらが優れていますか?

<c:if test="${param.Clear}">
  <font color="#ff0000" size="+2"><strong> 
  You just cleared your shopping cart! 
  </strong><br>&nbsp;<br></font>
</c:if> 

また

<%if (param.Clear){%>
      <font color="#ff0000" size="+2"><strong> 
      You just cleared your shopping cart! 
      </strong><br>&nbsp;<br></font>
<%}%>

私は大きなJSPプロジェクトを持っており、タグライブラリを使用する必要があるかどうか、またはJavaスクリプトレットを保持できるかどうかを知りたいです。

また、Java、JavaScript、CSS、およびHTMLコードを含む個別のJSPファイルになっているいくつかのものにカスタムタグを実装したいと思います。

4

5 に答える 5

3

パフォーマンスに関する限り、どちらもサーブレットにコンパイルされるため、パフォーマンスは同等です。

あなたが与えた例ではJSTLを推奨することはあまりないようですが、私が見たプロジェクトに何が起こるかは次のようなコードです:

<%if (param1.Clear() && param2.isSomeFlagSet() && !param3.isSomeOtherFlagSet()){%>
      <font color="#ff0000" size="+2"><strong> 
      You just cleared your shopping cart! 
      </strong><br>&nbsp;<br></font>
<%}%>

そして、それはすべてコピーされます。>_< これを機械的に JSTL に置き換えると、明らかに悪い結果が得られますが、物事をよりよく整理する機会が得られます。

BalusC のアドバイスに従い、可能な場合は JSP からインライン Java コードを取り除きます。

于 2011-09-02T19:30:10.703 に答える
3

私はJSPが大好きです。マークアップ言語を提供する Java ページの中で最高のものだと思います。主な欠点は、文字列とマップをエバリュエーターに渡して、Velocity のようなものでできるように結果を返すことができないため、電子メールなどではうまく機能しないことです。

しかし、その使用例を超えて、JSP は優れています。

あなたの質問に答えるために、スクリプトレット コードを保持することができます。スクリプトレット「if」vs ac:if タグのようなものは、「if」が単なる if であるのに対し、ac:if はメソッド呼び出しであり、タグを呼び出すときの環境シェナニガンであるため、CPU に関しては確実に高速になります。

とはいえ、その速度の違いがどの程度の影響を与えるかについては別の問題です。

ほとんどのコードは JSP にあるべきではありません。明らかに、ロジックは主にサーブレットまたはバックエンドで使用している他のものにある必要があり、JSP にはレンダリング コードだけが含まれます (IF や FOR などを確実に含む可能性があります)。 .)

スクリプトレットに対する主な議論は、JSP タグ ファイルです。タグ ファイルは、JSP を他のファイルから分離するものです。JSP タグ ファイルは、JSP をリファクタリング可能にし、新しいタグを簡単に追加できるようにします。ただし、タグ ファイルを使用する場合、作成するタグの境界内にスクリプトレット コードを含めることができないという欠点があります。

たとえば、「TABLE」タグを作成した場合、t:table 要素と /t:table 要素の間の要素には scriptlet 要素を含めることはできません。ただし、タグ ファイルの実装内にスクリプトレット コードを含めることはできるので、必要なスクリプトレットをラップするだけです。

ここに行くことができます: JSP トリックを使用してテンプレートを簡単に作成できますか? タグ ファイルの概要については、しかし、ここではそれをはるかに超えています。タグファイルを使用して、フォーム、テーブル、コンポーネント、およびあらゆる種類のものを定義します。

于 2011-09-02T20:49:23.350 に答える
1

これが、JSTLがより良い選択であると私が考える理由です。

  1. JSTLを使用すると読みやすくなります。
  2. JSPでメソッドを作成した場合、そのJSPのみがそれを使用できます。したがって、再利用性も1つです。
  3. pageScopeおよびrequestScopeオブジェクトは、を使用してすでに読み取り可能${foo}であり、request.getAttribute('foo')

短所-JSTLではできないことがあります。

于 2011-09-02T19:05:42.653 に答える
1

JSP をまったくなくしたいのですが... 私は JSP を 6 ~ 8 年間使用してきましたが、まったく使用する価値がありません。テンプレート エンジンを使用すると、より効率的に作業を進めることができます。

于 2011-09-02T20:26:29.010 に答える
1

あなたが提案した 2 つのオプションの間には、ごくわずかなパフォーマンスの違いがあるかもしれませんが、実行時のパフォーマンスが実際にタグ ライブラリが解決しようとしている問題だとは思いません。

私見、スクリプトレットに対する有効な議論は、ほとんどすべてコーディング、デバッグ、およびメンテナンスの問題に関するものです。JSP が長い間嘲笑されてきた主な理由の 1 つは、JSP についてではなく、人々が JSP をどのように使用してきたかということです。IDE で (他の誰かが作成した) JSP を開いて、スクリプトレットと HTML のこのスパゲッティ コードの混乱を見ることほど悪いことはありません。サーバー側のコードと HTML をあちこちに混在させたい場合は、PHP でコーディングすることもできます。:)

Taglibs を使用すると、JSP の最初の開発、デバッグの迅速化、および長期的な保守が容易になります。

私はスクリプトレットは非常に貧弱なオプションだと思うので、新しいプロジェクトを開始するときに、この小さなスニペットに似たものを web.xml ファイルに追加するのが常に好きです。

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <scripting-invalid>true</scripting-invalid>
  </jsp-property-group>
</jsp-config>

これにより、Web アプリ内の JSP でスクリプトレットの評価がオフになり、開発者はより良い代替手段を見つける必要があります。

Taglibs に関するもう 1 つの大きな議論は、より厳密な方法でコーディングすることになるということです。たとえば、Taglib を作成するときに、コードでスローされた例外を (何らかの方法で) 処理する必要があります。スクリプトレットに同じコードを記述した場合、IDE または JSP コンパイラから、コードを try-catch ブロックにラップするように求められることはありません。怠け者でプロ意識の低いプログラマーは、数行のエラー処理コードを書かなくて済むことを喜ぶでしょう。実際のプログラマーは、Java で例外をキャッチして適切に処理する方が、JSP が実行時に例外をスローするよりもはるかに簡単で、クリーンで、堅牢であることを経験から知っています。また、JUnit などに興味がある場合、taglibs の単体テストは非常に簡単です。定義上、おそらく JSP の単体テストは実際にはできませんが、せいぜいある種の統合テストを実行できる可能性があります。

また、誰かが言及したように、Taglibs を使用することにはアーキテクチャ上の利点があります。コードの設計と再利用の要素は、Taglibs に有利です。JSP ファイルに埋め込まれたスクリプトレット コードを簡単に共有する方法はありません。そのため、いたるところにコピーアンドペーストのコーディングが行われます。

于 2011-09-02T22:14:56.823 に答える