ホームページ  >  記事  >  Java  >  サーブレットのライフサイクルはいくつかの段階に分かれています

サーブレットのライフサイクルはいくつかの段階に分かれています

青灯夜游
青灯夜游オリジナル
2023-02-23 13:46:2631378ブラウズ

サーブレットのライフサイクルとは、サーブレットの作成から破棄までのプロセス全体を指し、次の 3 つの段階に分けることができます: 1. 初期化段階、init() メソッドを呼び出してサーブレットの初期化作業を実装します。実行ステージ (リクエストの処理) では、コンテナは HTTP リクエストを表す ServletRequest オブジェクトと、指定されたリクエストに対する HTTP レスポンスを表す ServletResponse オブジェクトを作成し、それらをパラメータとしてサーブレットの service() メソッドに渡します。段階。

サーブレットのライフサイクルはいくつかの段階に分かれています

#このチュートリアルの動作環境: Windows7 システム、Java8 バージョン、DELL G3 コンピューター。

1. サーブレットとその機能とは何ですか?

1. サーブレットとは何ですか?

サーブレット (サーバー アプレット) は Java サーブレットの略称で、 は小規模サービス プログラムまたはサービス コネクタと呼ばれ、Java で記述されたサーバー側プログラムです。独立したプラットフォームとプロトコルの特性を持ち、 は Web サーバーまたはアプリケーション サーバー上で実行されるプログラムです。

2. サーブレットの役割

Webブラウザからサーバーとして利用したり、他の HTTP クライアント HTTP サーバー上のリクエストとデータベースまたはアプリケーションの間の中間層。主な機能は、Web フォームからユーザー入力を収集し、対話的にデータを参照して生成し、動的な Web コンテンツを生成することです。

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

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

3 つのステップは次のとおりです: 初期化------> リクエストの処理------> 破棄

サーブレットの作成後オブジェクト ---------->

初期化

( init () メソッドを呼び出す)--------->処理/応答顧客へ リクエスト終了 ( service() メソッドを呼び出す) --------->Destroy ( destroy() メソッドを呼び出す) 、最後にガベージ コレクションが JVM のガベージ コレクターによって実行されます)

1) 初期化フェーズ

クライアントがサーブレットにアクセスするために HTTP リクエストをサーブレット コンテナーに送信すると、サーブレット コンテナは最初にリクエストを解析し、サーブレット オブジェクトがメモリに既に存在するかどうかを確認します。存在する場合は、サーブレット オブジェクトを直接使用します。存在しない場合は、サーブレット インスタンス オブジェクトを作成し、init() メソッドを呼び出してサーブレットを初期化します。サーブレットのライフサイクル全体を通じて、その init() メソッドを呼び出せるのは 1 回だけであることに注意してください。

2) 実行フェーズ (リクエストの処理)

これは、サーブレットのライフ サイクルで最も重要なステージです。このステージでは、サーブレット コンテナは、サーブレット コンテナの代表者を作成します。このリクエストは、HTTP リクエストの ServletRequest オブジェクトと HTTP レスポンスを表す ServletResponse オブジェクトを取得し、それらをパラメータとしてサーブレットの service() メソッドに渡します。

service() メソッドは、ServletRequest オブジェクトから顧客のリクエスト情報を取得してリクエストを処理し、ServletResponse オブジェクトを通じて応答結果を生成します。

サーブレットのライフ サイクル全体を通じて、サーブレットのアクセス要求ごとに、サーブレット コンテナはサーブレットの service() メソッドを呼び出し、新しい ServletRequest オブジェクトと ServletResponse オブジェクトを作成します。つまり、service() メソッドはサーブレットのライフサイクルを通じて複数回呼び出される可能性があります。

3) 破棄フェーズ

サーバーがシャットダウンされるか、Web アプリケーションがコンテナから削除されると、Web アプリケーションが閉じられるときにサーブレットも破棄されます。サーブレットを破棄する前に、サーブレット コンテナはサーブレットの destroy() メソッドを呼び出して、サーブレット オブジェクトが占有しているリソースを解放できるようにします。 destroy() メソッドは、サーブレットのライフサイクル全体で 1 回だけ呼び出すことができます。

サーブレット オブジェクトが作成されると、メモリ内に常駐し、クライアントのアクセスを待ちます。サーブレット オブジェクトは、サーバーがシャットダウンされるか Web アプリケーションが削除されるまで破棄されません。コンテナ。

3. ライフサイクル メソッドの詳細説明

サーブレット オブジェクトの作成とサーバー経由でのサーブレット オブジェクトの作成反映機構 まずリクエストに応じて作成されます。 (デフォルト)

1. init() メソッド

サーブレットの呼び出しオブジェクトの init() メソッドは、サーブレット情報を初期化します。init() メソッドは、作成後に 1 回だけ呼び出されます (初期化フェーズ)

(1) init メソッドは、1 回だけ呼び出されるように設計されています。これはサーブレットが最初に作成されるときに呼び出され、その後の各ユーザー要求では
は呼び出されなくなります。したがって、これは 1 回限りの初期化に使用され、ユーザーが初めてサーブレットの URL を呼び出したときに作成されます。あるいは、サーバーの初回起動時にサーブレットがロードされるように指定することもできます。

(2)ユーザーがサーブレットを呼び出すと、サーブレット インスタンスが作成され、ユーザーのリクエストごとに新しいスレッドが生成され、必要に応じて doGet メソッドまたは doPost メソッドに渡されます。

(3) init() メソッドは単にデータを作成またはロードするだけです。これらのデータは、サーブレットのライフサイクル全体を通じて使用されます。

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

public void init() throws ServletException {
  // 初始化代码...
}

2.service() メソッド

リクエストに応答して、service() または doGet()、doPost() メソッドを呼び出してリクエストを処理します。これらのメソッドはマルチスレッド状態で実行されます。 (クライアントリクエストへの応答フェーズ)

(1) service()メソッドは実際のタスクを実行するメインメソッドであり、クライアント(ブラウザ)からのリクエストとフォーマットを処理します。応答はクライアントに書き戻されます。

(2) サーバー は、サーブレット リクエストを受信するたびに、新しいスレッドを生成し、サービスを呼び出します。

(3) サーブレットが顧客のリクエストを受信して​​応答するプロセス まず、顧客がリクエストを送信し、サーブレットは service() メソッドを呼び出してリクエストに応答します。 service() メソッド内のソース コード リクエスト メソッドを照合し、doGet、doPost、およびその他のメソッドの呼び出しを選択し、対応するメソッドを入力してロジック層メソッドを呼び出し、顧客への応答を実装します。 Servlet インターフェースや GenericServlet には doGet や doPost などのメソッドが存在しないため、これらのメソッドは HttpServlet で定義されるため、サーブレットを定義するたびに doGet や doPost などのメソッドを実装する必要があります。

(4) 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() を書き換えるだけで済みます。

3. doGet() メソッド

はリクエストの処理に使用されます, メソッドはマルチスレッド状態で実行されます。 (顧客要求への応答フェーズ)

doGet() は、サービス リクエストで最も一般的に使用されるメソッドです。リクエストを処理するために使用されます。URL の リクエスト タイプが次の場合、 GET リクエスト 、または 未指定のリクエスト タイプ HTML フォームの場合、リクエストは doGet() メソッドによって処理されます。

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

public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

##4. doPost() メソッド

はリクエストの処理に使用され、メソッドはマルチスレッド状態で実行されます。 (顧客リクエストへの応答フェーズ)

doPost() はサービス リクエストで最も一般的に使用されるメソッドで、リクエストが特別に指定された

リクエストから来た場合にリクエストを処理するために使用されます。 POST HTML フォームとして入力すると、リクエストは doPost() メソッドによって処理されます。

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

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

##5. destroy() メソッド

destroy() メソッドは、サーブレット オブジェクトが長期間呼び出されなかった場合、またはサーバーがシャットダウンされた場合に、サーブレット オブジェクトを破棄するために呼び出されます。 (終了フェーズ) (1)

destroy() メソッドは、サーブレットのライフ サイクルの終了時に 1 回だけ呼び出されます。

(2) destroy() メソッドを使用すると、

サーブレットはデータベース接続を閉じ、バックグラウンド スレッドを停止し、Cookie リストまたはクリック カウンタをディスクに書き込み、その他の同様のクリーンアップ アクティビティを実行できます。 。

(3) destroy() メソッドを呼び出した後、

サーブレット オブジェクトはガベージ コレクションの対象としてマークされます。

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

public void destroy() {
    // 终止化代码...
  }

4. ライフ サイクル図 上記の内容を理解すると、期間チャートが非常に見やすくなります。

サーブレットのライフサイクルはいくつかの段階に分かれていますプログラミング関連の知識について詳しくは、

プログラミング教育

をご覧ください。 !

以上がサーブレットのライフサイクルはいくつかの段階に分かれていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。