English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 生命周期

Servletのライフサイクルは、作成から破棄までの全体のプロセスと定義されます。以下は、Servletが従うプロセスです:

  • Servletが初期化された後に呼び出されます。 init () メソッド。

  • Servletが呼び出されます。 service() メソッドでクライアントのリクエストを処理します。

  • Servletが破棄される前に呼び出されます。  destroy() メソッド。

  • 最後に、ServletはJVMのゴミ収集器によってゴミ収集されます。

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

init() メソッド

init メソッドは一度だけ呼び出されるように設計されています。それは最初の Servlet が作成されたときに呼び出され、その後のユーザーからの各リクエストで再び呼び出されません。したがって、それは一度だけの初期化に使用されます。Appletのinitメソッドのようにです。

Servletは、ユーザーが対応するServletのURLを最初に呼び出すときに作成されますが、サーバーが最初に起動したときにServletが読み込まれるように指定することもできます。

ユーザーがServletを呼び出すと、Servletのサンプルが作成され、各ユーザーリクエストは新しいスレッドで生成され、適切なタイミングでdoGetまたはdoPostメソッドに引き渡されます。init()メソッドは、Servletの全生命周期で使用されるデータを簡単に作成またはロードします。

initメソッドの定義は以下の通りです:

public void init() throws ServletException {
  // 初期化コード...
}

service() メソッド

service()メソッドは実際のタスクを実行する主なメソッドです。Servletコンテナ(つまりWebサーバー)は、クライアント(ブラウザ)からのリクエストを処理し、形式化されたレスポンスをクライアントに戻すためにservice()メソッドを呼び出します。

サーバーがServletリクエストを受け取るとき、サーバーは新しいスレッドを生成し、サービスを呼び出します。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()メソッドは、それぞれのサービスリクエストで最もよく使用されるメソッドです。以下は、これら2つのメソッドの特徴です。

doGet() メソッド

GET リクエストは、URLからの通常のリクエストまたは未指定のMETHODのHTMLフォームから来て、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() メソッドは一度だけ呼び出され、Servlet 生命周期の終わりに呼び出されます。destroy() メソッドは、データベース接続を閉じる、バックグラウンドスレッドを停止し、クッキーリストやクリックカウンタをディスクに書き込む、その他の類似のクリーンアップ活動を実行することができます。

destroy() メソッドが呼び出された後、servlet オブジェクトはゴミ収集の対象とされます。destroy メソッドは以下のように定義されています:

  public void destroy() {
    // 終了コード...
  }

アーキテクチャ図

以下の図は典型的な Servlet 生命周期のシーケンスを示しています。

  • 最初にサーバーに到達した HTTP リクエストは Servlet コンテナに委譲されます。

  • service() メソッドが呼び出される前に、Servlet コンテナは Servlet をロードします。

  • その後、Servlet コンテナは複数のスレッドから生成された複数のリクエストを処理し、各スレッドは単一の Servlet インスタンスの service() メソッドを実行します。