サーブレットのライフサイクル
サーブレットのライフサイクルは、作成から破棄までのプロセス全体として定義できます。サーブレットが実行するプロセスは次のとおりです。
サーブレットは、init () メソッドを呼び出すことによって初期化されます。
サーブレットは、service()メソッドを呼び出してクライアントのリクエストを処理します。
サーブレットはdestroy()メソッドを呼び出すことで終了(終了)します。
最後に、サーブレットは JVM のガベージ コレクターによってガベージ コレクションされます。
それでは、ライフサイクルメソッドについて詳しく説明していきます。
public void init() throws ServletException {
// 初始化代码...
}
service() メソッド service() メソッドは、実際のタスクを実行するための主要なメソッドです。サーブレット コンテナ (つまり、Web サーバー) は、service() メソッドを呼び出してクライアント (ブラウザ) からの要求を処理し、フォーマットされた応答をクライアントに書き込みます。 サーバーがサーブレットリクエストを受信するたびに、サーバーは新しいスレッドを生成し、サービスを呼び出します。 service() メソッドは、HTTP リクエスト タイプ (GET、POST、PUT、DELETE など) をチェックし、必要に応じて doGet、doPost、doPut、doDelete などのメソッドを呼び出します。 このメソッドの特徴は次のとおりです: public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }service() メソッドはコンテナによって呼び出され、service メソッドは必要に応じて doGet、doPost、doPut、doDelete などのメソッドを呼び出します。したがって、service() メソッドで何もする必要はなく、クライアントからのリクエストの種類に応じて doGet() または doPost() をオーバーロードするだけで済みます。 doGet() メソッドと doPost() メソッドは、すべてのサービス リクエストで最も一般的に使用されるメソッドです。両方の方式の特徴を以下に示します。 doGet() メソッド URL への通常のリクエスト、または METHOD が指定されていない HTML フォームからの GET リクエストは、doGet() メソッドによって処理されます。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
doPost() メソッド POST リクエストは、特に METHOD を POST として指定する HTML フォームから送信され、doPost() メソッドによって処理されます。 public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
destroy() メソッド destroy() メソッドは、サーブレットのライフサイクルの最後に 1 回だけ呼び出されます。 destroy() メソッドを使用すると、サーブレットはデータベース接続を閉じ、バックグラウンド スレッドを停止し、Cookie リストまたはクリック カウンタをディスクに書き込み、その他の同様のクリーンアップ アクティビティを実行できます。 destroy() メソッドを呼び出した後、サーブレット オブジェクトはガベージ コレクションの対象としてマークされます。 destroy メソッドは次のように定義されます: public void destroy() {
// 终止化代码...
}
アーキテクチャ図 次の図は、典型的なサーブレットのライフサイクル スキームを示しています。 - サーバーに到達した最初の HTTP リクエストは、サーブレット コンテナに委任されます。
- サーブレットコンテナは、service() メソッドを呼び出す前にサーブレットをロードします。
- その後、サーブレット コンテナは複数のスレッドによって生成された複数のリクエストを処理し、各スレッドは単一のサーブレット インスタンスの service() メソッドを実行します。 🎜