質問

私は、サーブレットでアプリケーションロジックを維持し、JSPを可能な限りシンプルに保つことに熱心です。その理由の1つは、優れたWebデザイナーがHTMLの知識を拡張して、簡単な反復、Beanへのアクセスなどを行うためにいくつかのJSTLタグを構築できることです。また、より複雑な/ ajax / jsコンポーネントも保持しますタグライブラリ(displayTagに似ていますが、独自のコンポーネント用)。

ほとんどの場合、すべてが正常に機能します-サーブレットは必要なSQLを実行し、JSPがアクセスできるように結果をBeanに保存します。問題があるのは、アクセスするレコードがデザインによって指定されている場合です。

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

デザイナーが本当に望んでいるのは、プロダクトIDでプロダクトBeanを取得して、通常どおりプロパティにアクセスできるようにする方法です。もちろん、すべての製品を照会したくはありません。また、プレゼンテーションで照会したくありません。

私はここで不可能を求めているので、何かをあきらめなければならないと確信しています。私の質問は何ですか?

編集

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

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

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

編集-例

この例が役立つことを期待しています:

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

サーブレットは、これらがどの製品になるのかを知ることができません。デザイナーがそれらを変更/削除/追加したい場合、JSP(およびおそらく1つの答えが示唆するXML)を編集するだけでよいためです。

役に立ちましたか?

解決

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

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

私の推奨事項は、デザイナーがフロントエンドに必要な特別なケースを含む構成XMLファイルを作成し、サーブレットがそれを読み取ってから、dumb BeanをJSPに返すことです。

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

他のヒント

表示コードとデータベースコードをより適切に分離する必要があるようです。データベースとの対話を処理する個別のクラスを用意し、表示については何も知らないようにしてください。

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

フロントエンドのクエリを実行するカスタムBeanを作成する必要があります。実際、ここで言うことによると、おそらくデータを取得するためのいくつかのBeanのようなものです。

デザインの観点からそれを行うことに問題はありません。ホームページの特定のデザインには、サイトの他の部分よりも異種の要件があるというだけです。ホームページ(またはその他)のBOを作成するために、開発チームに自分のニーズを十分に伝える必要があることをデザイナーが知っていることを確認してください。

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

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

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

ケースの例を挙げることができれば助かります。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top