2013-05-25 12 views

答えて

22

destroy()は、サーブレットの特定のインスタンスをアンロードするときにサーブレットコンテナによって呼び出さライフサイクル方法です。同様に、コンテナは、サーブレットを要求しているクライアントがある場合は、service()を呼び出します。

サーブレットのdestroy()メソッドからservice()メソッドを呼び出すことはできますか?

短い答え:はいservice()としては、他の同様の方法です。

長い回答:可能ですが、意味がありません。 service()には、サーブレットが呼び出されたときに通常コンテナによって提供される要求と応答パラメータが必要です。自分でservice()に電話している場合は、どのようにこれらのパラメータを入力しますか?何のために?両方でnullを使用しますか? 2つの空のパラメータについては、service()は何が良いですか?

サーブレットのservice()メソッドからdestroy()メソッドを呼び出すことはできますか?それはまた、他のどのような方法であるとして

はいは、再び、あなたは service()内から destroy()を呼び出すことができます。まだ奇妙ですが、 destroy()はあなたが定義したロジック(クリーンアップ、属性の削除など)を行いますので、時には意味があります。


重要:ちょうど単にdestroy()うではないアンロードサーブレットのインスタンスを呼び出すことに注意してください。プログラム内でサーブレットのライフサイクルを管理していない場合、サーブレットコンテナはそれを行います。

+0

ご回答ありがとうございます。その本当に良い。 –

+0

偉大な答え - acdcjunior – MAA

2

destroy()の目的は、Servletインスタンスが使用するすべてのリソースを割り当て解除/解放することです。 destroy()コンテナの登録解除サーブレットとそのサービスを呼び出します。

はいあなたはdestroy()からanyohter方法などのservice(request, response)を呼び出すことができますが、それらのサービスメソッドとしてdestroy()からサービスメソッドを呼び出してその役に立たないが、実行/呼ばれることになるだろうことはありません、要求と応答がAS nullになりますので、実行することが文句を言いませんこれらのオブジェクトはコンテナによって提供されません。Java docから

public void destroy() { 
     try 
     { 
      doPost(null, null); // will not be executed 
      doGet(null, null); // will not be executed 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

:サーブレットがサービスから取られているサーブレットに示すために、サーブレットコンテナによって呼び出され

ます。public void破壊()

。このメソッドは、サーブレットのサービスメソッド内のすべてのスレッドが終了した後、またはタイムアウト時間が経過した後にのみ呼び出されます。

サーブレットコンテナがこのメソッドを呼び出した後、サーブレットコンテナはこのサーブレットで再度serviceメソッドを呼び出しません。

このメソッドでは、保持されているリソース(メモリ、ファイルハンドル、スレッドなど)をクリーンアップし、永続状態がサーブレットの現在の状態とメモリ内で同期していることを確認できます。