2011-12-05 11 views
2

私は単純なサービスのようなアプリケーションを作成しようとしています。私はエントリポイント、リクエストの受信者としてのサーブレットといくつかのヘルパーJavaクラスとしてブラウザを使用しています。たとえば、ユーザAは、ユーザBと同時にアプリケーションを使用しています。複数のユーザーがWebアプリケーションで使用すると、古いJavaオブジェクトはどうなるでしょうか?

私の質問は、複数のユーザーがサービスにアクセスすると、ヘルパークラスはどうなりますか?ユーザーがアプリケーションを使用するたびにインスタンス化されますか? 5人のユーザーは、それら(ヘルパークラス)は5回インスタンス化されますか、またはすべてのユーザーに対して、すべてのコピーが1つだけありますか?

+0

私は理解していない、pojosはヘルパークラスですか?またはあなたはポーホスに何が起こるか知っていますが、ヘルパークラスには何が起こるのか分かりません。 – omarello

+0

不明確な説明には申し訳ありません。 pojosはヘルパークラスです。私は複数のユーザーがWebアプリケーションを使用しているときに何が起こるのか分かりません。 –

+0

@simon:コードを見ずに答えを出すことはできません。 Javaクラス(およびオブジェクト)を使用する方法はいくつかあります。 – home

答えて

2

これらのPOJOをいつどこでインスタンス化するかによって異なります。 doGetまたはdoPostでそれらをインスタンス化する場合は、リクエストごとにこれらのオブジェクトの新しいインスタンスを作成します(リクエストに応答した後に破棄します)。今、あなたが長いメモリスコープ(セッションなど)にそれらを「怠惰なインスタンス化」している場合は、それらを長く保持します(セッションスコープ、セッションのライフタイム全体を通して)。

+0

私が探していたもの!ありがとう@ Hyangelo –

1

単純な答えは、new YourClasseName()を使用しているときはいつでも、新しいオブジェクトをインスタンス化することです。

サーブレットコンテナは、(特別な変更をしていない限り)単一のサーブレットに対する新しいリクエストごとにスレッドを割り当てるため、ポーズを作成するために5ユーザー= 5スレッド= 5コールを単純に配置します。オブジェクトが5回インスタンス化されることを意味します。

+0

ありがとう@omarello、私はちょっとサーブレットの動作とちょっと混乱しました。しかしあなたはそれをはっきりと説明しました。それに感謝します –

1

私はあなたが戻って、クラスのインスタンス化とそのライフサイクルについて最初にJavaで読む必要があると思います。さらに具体的には、コードスニペットを入力してください。これは、あなたは、単にHelper h = new Helper();を呼び出すと、あなたは自分のヘルパークラス上のアクションを呼び出す場合です

の1-正規ヘルパークラス

:それは、あなたがあなたのヘルパークラスをインスタンス化する方法に私は考えることができる3つの可能性に依存しますh.doHelp(param) - サーブレットがこれを呼び出すたびに、Helperクラスの新しいインスタンスを作成します。もちろん、ヘルパークラスが静的変数を使用している場合を除きます。

2 - シングルトンとあなたのサーブレットは、シングルトンが作成されている方法でそれを呼び出すよう、あなたがそのように行う場合は、サーブレットへのすべての要求が同じインスタンスを共有し、例えばHelper h = Helper.getInstance()をあなたのヘルパークラスを実装するシングルトン

静的クラスあなたのヘルパークラスがちょうど例えば、静的メソッドを使用している場合

- ヘプラークラス

3の。 Helper.doHelp(param);もちろん、ヘルパークラスが静的変数を使用しない限り、別の要求の間には共有もありません。

+0

よく私は定期的なヘルパークラスを使用しています。インスタンス化の終了時には、それぞれ独自のヘルパーメソッドを持つh1、h2、h3があります。 –

1

ヘルパークラスはシングルトンでなければなりません。つまり、userAとuserBの両方が同じインスタンスを2回インスタンス化する代わりに使用します。

+0

私はそれを行うことができると思いますが、私はすべての要求に対してサイクルを作成して破壊する方が良いでしょうか? –

関連する問題