サーブレットのライフサイクル


サーブレットのライフサイクルは、作成から破棄までのプロセス全体として定義できます。サーブレットが実行するプロセスは次のとおりです。

  • サーブレットは、init () メソッドを呼び出すことによって初期化されます。

  • サーブレットは、service()メソッドを呼び出してクライアントのリクエストを処理します。

  • サーブレットはdestroy()メソッドを呼び出すことで終了(終了)します。

  • 最後に、サーブレットは JVM のガベージ コレクターによってガベージ コレクションされます。

それでは、ライフサイクルメソッドについて詳しく説明していきます。

init() メソッド

init メソッドは 1 回だけ呼び出されるように設計されています。これはサーブレットが最初に作成されたときに呼び出され、後続のユーザー要求ごとには呼び出されなくなります。したがって、アプレットの init メソッドと同様に、1 回限りの初期化に使用されます。

サーブレットは、ユーザーがサーブレットに対応する URL を最初に呼び出したときに作成されますが、サーバーの最初の起動時にサーブレットがロードされるように指定することもできます。

ユーザーがサーブレットを呼び出すと、サーブレット インスタンスが作成され、各ユーザー リクエストは新しいスレッドを生成し、必要に応じて doGet メソッドまたは doPost メソッドに渡します。 init() メソッドは、サーブレットのライフサイクル全体で使用されるデータを作成またはロードするだけです。

init メソッドは次のように定義されています:

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() メソッドを実行します。 🎜
Servlet-LifeCycle.jpg