2009-08-05 18 views
2

サーブレットを呼び出すリンクをクリックすると。他の仕事は、この修正プログラムのために周りにありますが、私はそのリンクにサーブレットがエラーをスローし、複数の時間(エラーの詳細は重要ではない) をクリックし (のようになど、リンクを一度クリック無効) 私は好奇心これを制御する方法があります要求/応答オブジェクトを介して。サーブレット制御の複数の要求

+2

私は、エラーの詳細があなたが修正しようとしているものを見るために重要だと思います。おそらくセッションに何らかの状態を保存することができます。 – Tommy

答えて

3

エラーは1つがあなたがおそらくあなたは、サーブレットのエラーの詳細は、潜在的に興味深いサーブレットに

+0

エラーは、いくつかのロジックを持つObjectをいくらか大きくしています。これは、マルチユーザ環境では問題にはなりません。しかし、同じユーザーに対してパラレルリクエストを行うと、この問題が発生します。 – Madhu

1

を実装する方法にスレッド安全性の問題を持っていることを意味し、別の演技サーブレットへの複数の呼び出しを持つ、関連性があります。一般的にサーブレットAPIはエラーを投げてはいけません。これはアプリケーションエラーです。

私が適用しようとする一般的な原則は次のとおりです。

1)。私たちは、実際には2つのそのような要求を送信したくない、(例えば。うっかり二度同じ要求を提出するユーザーのためにそれをdifficlut作るためにUIを構築し、私のアカウント£100を引き落とす。これは、いくつかのNIFTは助けることができるjavascriptの場所です。

2)。私たちは、重複を見つけることを可能にする要求にある種の識別子を含めるなど、不注意な二重要求に対して防御するアプリケーションを構築します。

私たちはではありません。は、UIが完璧であると想定しています。私たちのビジネスアプリケーション層は、ダブルアクションを防止する最終的な責任を負っています。

+0

があり、我々は、ユーザーのヒットは、サーブレットがレスポンスオブジェクトをcostructingされ、ブラウザがリクエストオブジェクトを送信して送信すると、この問題は – Madhu

+0

を解決しますHttpResponseObjectを更新したときにすでに利用可能な任意の組み込み方法ではありません。 ブラウザは、2番目のクリックが最初のものと関係があることを「知っている」ので、2つの要求には関係がありません。 リクエストを受信したサーブレット(別のクラスタメンバーで実行されている可能性もあります)は、コードを記述しない限り、以前のreuqest(HTTPはステートレス)について何もできません。 Strustなどのフレームワークには、この問題に対処する機能があります。 – djna

+0

意味があります。しかし、まだ私はこの問題の解決策を見つけるためにgoogleing – Madhu

0

サーブレットを入力するとき、サーブレットセッションスコープのフラグを設定し、出るときにそれをリセットします。入力時にフラグが設定されている場合は、黙って無視してください。

ServletExceptionがフラグセットを残さないようにするには、サーブレットのエラー処理が必要になります。

+0

概念的には、はい、しかし、クラスタ化されたインスタンスを扱うときは厄介なことがあります。最近のリクエストを追跡するためにdbを使用する方が簡単かもしれません。サーブレットレベルではなくビジネスロジックで要求を複製します。 – djna

1

エラーは実際には本当に重要です。

あなたは、スレッドの安全性の問題を持っている可能性がありますが、あなたはまた、「競争条件」を持つことができる、つまり、プロセスの結果は、実行順序に依存し、そのうちの一つは、あなたにエラーを与えることができます。

(競合条件:http://en.wikipedia.org/wiki/Race_condition

関連する問題