これは、私が数日前に直面したインタビューの質問の 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()
サーブレットがサービスを停止していることをサーブレットに示すために、サーブレット コンテナーによって呼び出されます。このメソッドは、サーブレットのサービス メソッド内のすべてのスレッドが終了した後、またはタイムアウト期間が経過した後にのみ呼び出されます。
サーブレット コンテナがこのメソッドを呼び出した後、このサーブレットでサービス メソッドを再度呼び出すことはありません。
このメソッドにより、保持されているリソース (メモリ、ファイル ハンドル、スレッドなど) をクリーンアップする機会がサーブレットに与えられ、永続的な状態がメモリ内のサーブレットの現在の状態と確実に同期されます。