これは、私が数日前に直面したインタビューの質問の 1 つです。
service()
からメソッドを呼び出すことは可能destroy()
ですか?
前もって感謝します。
これは、私が数日前に直面したインタビューの質問の 1 つです。
service()
からメソッドを呼び出すことは可能destroy()
ですか?
前もって感謝します。
destroy()
サーブレットの特定のインスタンスをアンロードするときに、サーブレット コンテナによって呼び出されるライフサイクル メソッドです。同様に、サーブレットを要求するクライアントがあると、コンテナーが呼び出されます。service()
サーブレットで
service()
メソッドからメソッドを呼び出すことはできますか?destroy()
短い答え: はい、service()
他の方法と同様です。
長い答え:できますが、意味がありません。service()
通常、サーブレットが呼び出されたときにコンテナーによって提供される要求パラメーターと応答パラメーターが必要です。自分で呼び出す場合service()
、これらのパラメーターをどのように提供しますか? 何のために?null
両方使うservice()
空のパラメーターが 2 つあると、何がよい
サーブレットで
destroy()
メソッドから メソッドを呼び出すことはできます か?service()
はい、繰り返しますが、他のメソッドと同様にdestroy()
内から呼び出すことができます。service()
まだ奇妙ではありますが、これは、destroy()
定義したロジック (クリーンアップ、属性の削除など) と同じように、場合によっては理にかなっています。
重要: 単純に呼び出すだけではサーブレット インスタンスがアンロードdestroy()
されないことに注意してください。プログラムでサーブレットのライフサイクルを管理するのではなく、サーブレット コンテナーが管理します。
目的はdestroy()
、サーブレット インスタンスによって使用されるすべてのリソースの割り当てを解除/解放することです。destroy()
コンテナーの登録解除サーブレットとそのサービスを呼び出すことによって。
はい、任意のメソッドを呼び出すことはできますが、service(request, response)
実行されないため、これらのサービスメソッドが呼び出されたり実行されたりしdestroy()
ないため、サービスメソッドを呼び出すのは無意味destroy()
です。これらのオブジェクトはコンテナーによって提供されないため、要求と応答は null になります。
public void destroy() {
try
{
doPost(null, null); // will not be executed
doGet(null, null); // will not be executed
}
catch(Exception e)
{
e.printStackTrace();
}
}
Javaドキュメントから:
public void destroy()
サーブレットがサービスを停止していることをサーブレットに示すために、サーブレット コンテナーによって呼び出されます。このメソッドは、サーブレットのサービス メソッド内のすべてのスレッドが終了した後、またはタイムアウト期間が経過した後にのみ呼び出されます。
サーブレット コンテナがこのメソッドを呼び出した後、このサーブレットでサービス メソッドを再度呼び出すことはありません。
このメソッドにより、保持されているリソース (メモリ、ファイル ハンドル、スレッドなど) をクリーンアップする機会がサーブレットに与えられ、永続的な状態がメモリ内のサーブレットの現在の状態と確実に同期されます。