0

私は、アプリケーション ロジックをサーブレットに保持し、JSP を可能な限りシンプルに保つことの大ファンです。この理由の 1 つは、優れた Web デザイナーであれば、HTML の知識を拡張して、いくつかの JSTL タグを組み込み、単純な反復やアクセス Bean などを実行できるようにする必要があるためです。また、より複雑な/ajax/js コンポーネントを背後に置いておきます。タグ ライブラリ (displayTag に似ていますが、独自のコンポーネント用です)。

ほとんどの場合、すべてうまくいきます。サーブレットは必要な SQL を実行し、JSP がアクセスできるように結果を Bean に格納します。問題があるのは、アクセスしたいレコードが設計によって指定されている場合です。

最も明確な例はホームページです。人目を引く効果的なものである必要があります。サイトの他の部分のように統一する必要はありません。ここには、特定の製品レコードなどを照会したい、1 回限りの、または「特別なケース」がたくさんあります。

設計者が本当に望んでいるのは、製品 ID で製品 Bean を取得して、通常どおりプロパティにアクセスできるようにする方法です。もちろん、すべての製品に対してクエリを実行する必要はありません。また、プレゼンテーションでクエリを実行する必要もありません。

私はここで不可能なことを尋ねていると確信しており、何かをあきらめなければならない. 私の質問は何ですか?

編集

JSP を呼び出す前にすべてのアプリケーション ロジックを完成させる必要があると考えるのは間違っていますか? 私は、サーブレットですべてのクエリ/計算/処理を行い、(かなり) ダム Bean を (非常に) ダム JSP に渡すことがベスト プラクティスと見なされているという印象を受けました。

クエリの実際の複雑さを別のクラス (カスタム タグまたは Bean) にカプセル化し、JSP がそれを呼び出すことができるメソッドがいくつかあります。これにより、JSP は単純になりますが (目標 1)、JSP はまだクエリを「トリガー」しています。プロセスのかなり遅い段階です。

  • 私はこれを完全に間違っていましたか?これを行うのは問題ありません。
  • 一般的なルールですが、この場合はこれを行っても問題ありません。
  • 問題が発生する可能性がありますか?

編集 - 例

この例が役立つことを願っています:

ホームページは、カテゴリ/検索ページのような「テンプレート」ではありません。たとえば、マーケティング画像やいくつかの特定の製品画像とうまく機能するようにカスタム設計されています. ただし、動的に取得する必要がある 2 つの製品に関する情報 (名前、および重要な価格) は、データベースと同期したままです。

設計者がそれらを変更/削除/追加したい場合、サーブレットはこれらがどの製品になるかを知ることができません.

4

5 に答える 5

1

私の理解が正しければ、JSP には特定の製品を必要とするロジックがありますが、現時点では DB からクエリを実行したくないため、サーブレットがそれを認識するには遅すぎます。

(余談ですが、関心の分離を維持するというあなたの意志を尊重しますが、これが問題であるという事実は、あなたのフレームワークがプレゼンテーション層にあまりにも多くのロジックを持っていることを明確に示しています...しかし、おそらくそれを修正できないため.. .先に進む)。

私のお勧めは、設計者がフロントエンドに必要な特殊なケースを含む構成 XML ファイルを作成し、サーブレットがそれを読み取ってから、ダム Bean を JSP に戻すことです。

または... XMLHTTPRequest を使用して複数のリクエストに分割し、個々のクエリごとにサーブレットにコールバックしてから、クライアントでページを組み立てます。

于 2009-05-05T00:25:26.930 に答える
1

JSP をレンダリングする前に、すべてのアプリケーション ロジックを完成させる必要があると考えるのは間違いではありません。

JSP で表示するためにさらに多くのものを取得する必要がある場合は、サーバーへの別の要求と別のページ サイクルになります。「インタラクティブな」読み込みエクスペリエンスを探している場合は、AJAX を使用できます。

単一ページのライフサイクルでは、JSP からデータベース呼び出しを呼び出さなければならない理由を理解するのは難しいと思います。サーブレット/ヘルパー クラスでデータを見つけるのに役立つすべての必要なフォーム変数を含むページが以前に投稿されていませんか?

事例を挙げていただけると助かります。

[編集]あなたの例を見ると、デザイナー (またはサイトの管理者) は、その情報を JSP の一部ではなく構成として設定する必要があります。または、外出先で変更できるように、データベース内の情報を維持するための小さなアプリ/管理ページを用意することもできます。ホームページを表示するときは、構成を読み、適切なデータをロードしてください。

于 2009-05-05T00:27:27.783 に答える
1

ディスプレイとデータベース コードをより適切に分離する必要があるようです。データベースとのやり取りだけを扱い、表示については何も知らない別のクラスを用意する必要があります。

次に、id で製品を検索し、その Bean を返すメソッドを作成して、ディスプレイが必要な属性を引き出すことができるようにします。

于 2009-05-04T23:32:25.590 に答える
0

質問が何であるかわかりません。jsp ページから sql ステートメントを取り出したい場合は、それらをプロパティ ファイルに入れ、jsp ページからプロパティ ファイルを読み取るだけです。

于 2009-05-04T23:30:19.743 に答える