私はサーブレットのライフサイクルについて読んでいて、この疑問を抱きました。他の Java メソッドを呼び出すように、オーバーライドされたサーブレットのサービス メソッド内でサーブレットの init および destroy メソッドを呼び出すことはできますか? これはコンテナの実際の流れに影響しますか?
4 に答える
メソッドからandを確実に呼び出すことができます。これらのメソッドが何をするかによって、つまり実際にサーブレットを破棄するかどうかによって、これはおそらく賢明ではありません。init
destroy
service
たとえば、リクエストが届いて問題が発生したとします。destroy
これを解決する最も簡単な方法は、サーブレットを呼び出してinit
から「再起動」することだと思います。
再起動にはゼロ以外の時間がかかり、その間に別のリクエストが届きます。このリクエストで問題が発生しました。また、サーブレットを再起動することも決定します。
あなたはこれがどこに向かっているのか分かります...
サーブレットのライフサイクル メソッドをいじらず、コンテナーに任せることをお勧めします。これらのメソッドを呼び出す必要がある場合は、スレッドの同期に十分注意してください。
「コンテナの実際のフロー」に影響を与える限り、コンテナはあなたがメソッドを呼び出したことを知る方法がないため、リクエストが殺到し続けます。コンテナは、それらのメソッドを呼び出すことに気づきません。
これらのメソッドは問題なく呼び出すことができます。しかし、それらはライフサイクル メソッドです。サーブレット クラスのインスタンス化と破棄であるコンテナによって実行される操作は、その時点では発生しません。
コンテナーによって呼び出されるたびに、これらの操作のみが発生します (オブジェクトのインスタンス化と破棄)
はい、電話をかけることができますが、これを行う必要はありません。このメソッドは、サーブレット コンテナーで使用されます。
たとえば、内部状態を初期化する必要がある場合は、このメソッドを使用する必要があります。
メソッドinit()
とdestroy()
デフォルトは空であり、リソースを取得/解放するにはそれらをオーバーライドする必要があります (たとえば)。
それらを呼び出すことができ、サーブレットのライフサイクルには影響しません。