Servlets-life-cycle

提供:Dev Guides
移動先:案内検索

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

サーブレットのライフサイクルは、作成から破棄までのプロセス全体として定義できます。 以下は、サーブレットがたどるパスです。

  • サーブレットは、* init()*メソッドを呼び出すことにより初期化されます。
  • サーブレットは* service()*メソッドを呼び出して、クライアントのリクエストを処理します。
  • サーブレットは、* destroy()*メソッドを呼び出すことで終了します。
  • 最後に、サーブレットはJVMのガベージコレクタによってガベージコレクションされます。

次に、ライフサイクルの方法について詳しく説明します。

init()メソッド

initメソッドは1回だけ呼び出されます。 サーブレットの作成時にのみ呼び出され、その後のユーザー要求に対しては呼び出されません。 したがって、アプレットのinitメソッドと同様に、1回限りの初期化に使用されます。

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

ユーザーがサーブレットを呼び出すと、各サーブレットの単一のインスタンスが作成され、各ユーザー要求により、必要に応じてdoGetまたはdoPostに渡される新しいスレッドが生成されます。 init()メソッドは、サーブレットの存続期間を通じて使用されるデータを単に作成またはロードします。

initメソッドの定義は次のようになります-

public void init() throws ServletException {
  //Initialization code...
}

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()メソッドはコンテナによって呼び出され、サービスメソッドは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 code
}

doPost()メソッド

POSTリクエストは、POSTをMETHODとして具体的にリストするHTMLフォームから発生し、doPost()メソッドで処理する必要があります。

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //Servlet code
}

destroy()メソッド

destroy()メソッドは、サーブレットのライフサイクルの最後に1回だけ呼び出されます。 この方法により、サーブレットはデータベース接続を閉じたり、バックグラウンドスレッドを停止したり、Cookieリストやヒットカウントをディスクに書き込んだり、その他のクリーンアップアクティビティを実行したりできます。

destroy()メソッドが呼び出された後、サーブレットオブジェクトはガベージコレクション用にマークされます。 destroyメソッドの定義は次のようになります-

public void destroy() {
  //Finalization code...
}

アーキテクチャ図

次の図は、一般的なサーブレットのライフサイクルシナリオを示しています。

  • 最初に、サーバーに着信するHTTP要求がサーブレットコンテナーに委任されます。
  • サーブレットコンテナは、service()メソッドを呼び出す前にサーブレットをロードします。
  • 次に、サーブレットコンテナは複数のスレッドを生成して複数のリクエストを処理し、各スレッドはサーブレットの単一インスタンスのservice()メソッドを実行します。

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