2011-01-06 7 views
2

ServletContextListenerの概要と、web.xmlでの実装方法と登録方法を知っています。ServletContextListenerとして登録されているクラスのライフサイクルは何ですか?

しかし、質問は次のとおりです。 Webアプリケーションの開始時に、1つのリスナーがjavaVMごとに1つのインスタンスが作成されます。次に、そのcontextInitialized()メソッドが呼び出されます。

アプリケーションが閉じられている瞬間、リスナーのcontextDestroyed()メソッドが呼び出されます。しかしそれはリスナーの同じインスタンスですか?または、最初のインスタンスが破棄され、contextDestroyed()が呼び出された新しいインスタンスが作成される可能性がありますか?

+0

ライフサイクルはアプリケーションの期間中存在します(私は思うでしょう)。 –

+0

私は証明リンクを見たいと思っています:) – Mikhail

答えて

4

サーブレット仕様からはっきりとした証明が必要です。私はそれがあなたの質問に明確な答えを提供することをわからないんだけど、それは強力なヒントを提供します:

SRV.10.3.3リスナー登録
は、Webコンテナは、各リスナクラス のインスタンスを作成し、 アプリケーションによる最初の要求の処理の前にイベント通知のために を登録します。

これは、最初のリクエストを処理した後にインスタンスを作成することは禁止されています。

+0

私はちょうどこの問題にヒットしました。明示的な回答は、http://docs.oracle.com/cd/B12166_01/web/B10321_01/filters.htm、「イベント・リスナーの宣言と起動」の項を参照してください。この段落全体を引用するのは時間がかかりすぎます。要点は、「すべてのリスナーは、最後の要求がアプリケーションに対して処理されるまで有効です。 –

1

contextInitialized()とcontextDestroyed()の両方にコードを入力する方法はありますか。このような

何か:

System.out.println(this.toString()) 

は、あなたがオブジェクトのデフォルトのtoStringメソッドをオーバーライドしていないあなたが進(8104b1 @)で、それかどうかをチェックできることを行うことによって、オブジェクトのハッシュコードが表示されるはずと仮定すると、同じオブジェクトです。

+0

これはインスタンスがいくつかの特定のケースでのみ同じであることを証明します:) – Mikhail

関連する問題