Tomcatの全体構造の簡単な紹介

Tomcatの全体構造の簡単な紹介

Tomcat は Web コンテナとして広く知られています。Java を学び始めたときから現在の仕事に至るまで、私のプログラミング キャリア全体にわたって Tomcat が付き添ってきました。 Tomcat は本質的にはサーブレット コンテナです。サーブレットが実行できることは、要求リソースを処理し、クライアントの応答オブジェクトに入力することです。

Tomcat は、作成した Servlet クラスをロードし、Servlet の init() メソッドを呼び出し、リクエストに対して servletRequest および servletResponse インスタンスを作成し、Servlet の service() メソッドを呼び出し、servletRequest および servletResponse をパラメータとして渡し、Servlet を閉じるときに destroy() を呼び出して Servlet をアンインストールする役割を担っています。次に、Tomcat の全体構造について簡単に紹介します。

Tomcatの全体構造

図に示すように、Tomcat の 2 つの主要コンポーネントはコネクタとコンテナです。複数のコネクタとコンテナがサービスを形成します。サービスは外部にサービスを提供するために使用され、サービスのライフサイクルはサーバーによって制御されます。サーバーは最上位レベルの抽象化に属します。

コネクタは、ソケット接続、リクエストのカプセル化、接続スレッド プールなど、ネットワーク接続に関連する処理を処理するために使用されます。コンテナは主にコネクタによって受け入れられた要求を処理します。サービスはコネクタとコンテナの周囲の追加レイヤーにすぎず、これらをまとめて外部にサービスを提供します。サービスには複数のコネクタを設定できますが、コンテナは 1 つしか設定できません。すべてのコンポーネントのライフサイクルは、init、start、stop、destroy メソッドを含むライフサイクル インターフェイスを使用して均一に管理されます。

元のコネクタは BIO モードにしか設定できませんでした。現在、高レベルの Tomcat バージョンのデフォルトの接続モードは NIO であり、リクエストの同時実行性が大幅に向上しています。

Tomcat には、上から順に、エンジン、ホスト、コンテキスト、ラッパーの 4 種類のコンテナーがあります。ラッパーはサーブレット、コンテキストはアプリケーション、ホストはサイト、エンジンはエンジンに相当します。コンテナは 1 つだけです。コンテナ間の起動は、

Tomcat コンテナ モデル

今回はTomcatの全体構造について簡単に紹介しました。次にTomcatリクエストの処理フローを通して理解を深めていきます。リクエストがhttp://localhost:8080/test/index.jspであると仮定すると、Tomcatの処理フローは次のようになります。

1. 要求はポート 8080 に送信され、コネクタによって受信されます。

2. コネクタは、処理のために要求をサービスのエンジンに渡し、エンジンが応答するのを待ちます。

3.エンジンはリクエストアドレスを取得し、仮想ホストホストと照合します。

4. エンジンは、リクエスト/test/index.jspを受信するlocalhostという名前のホストを照合し、ホストが所有するコンテキストと一致させます。

5. ホストはコンテキストをパス /test と一致させます。一致するものが見つからない場合は、空のコンテキストによって処理されます。

6. コンテキストはrequest/index.jspを取得し、マッピングファイル内の対応するサーブレットを探します。

7. コンテキストは、パターン *.jsp とサーブレットを照合し、対応する JspServlet クラスを見つけます (Jsp は最終的に Servlet に変換されます)

8. httpservletrequest および httpServletResponse オブジェクトを構築し、それらをパラメータとして使用して JspServlet の doGet または doPost を呼び出します。

9.contextはホストに応答を返す

10. ホストはエンジンに応答を返す

11. エンジンはコネクタに応答を返す

12. コネクタはユーザーのブラウザに応答を返し、リクエストは終了します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Pythonはパイプラインを使用してRedisのバッチ読み取りと書き込みを行います
  • Python: Scrapy フレームワークでのアイテム パイプライン コンポーネントの使用に関する詳細な説明
  • パイプラインを使用して Java で Redis バッチを読み書きする方法の詳細な説明 (hmset と hgetall)
  • パイプライン(PipeLine)とバッチ(Batch)操作を使用したRedisの大幅なパフォーマンス向上の詳細な説明
  • Scrapyカスタムパイプラインクラスは、収集したデータをMongoDBに保存する方法を実装します。
  • セマフォによるTomcatの異常終了の解決方法
  • Tomcat パイプライン モードのパイプラインとバルブの詳細な説明

<<:  Java は Excel から MySQL にデータをインポートします

>>:  Linux で履歴コマンドを表示および実行する方法

推薦する

Apache ストレステストツールのインストールと使用

1. ダウンロードApacheの公式サイトhttp://httpd.apache.org/にアクセス...

CentOS 7にChromeブラウザをインストールする方法

この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...

Docker Compose を使用して nginx のロード バランシングを実装する方法

Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装するすべて...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明

目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....

1行のコードでLinuxのプロセスを隠す方法を学ぶ

友人たちはいつも、Linux のプロセスを隠す方法を私に尋ねます。私は、どの程度隠したいのか、カーネ...

Eclipse/Tomcat でホットデプロイメントとホットスタートを実装する方法

1. ホット デプロイメント: コンテナの実行中にプロジェクト全体を再デプロイすることを意味します。...

ローカル yum ソースの設定、国内 yum ソースの設定、epel ソースの設定を行う Linux の手順

1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...

(MariaDB) MySQL のデータ型とストレージメカニズムの包括的な説明

1.1 データ型の概要データ型は、各フィールドに保存できるデータの種類、保存できるデータの量、保存で...

CSS における px、em、rem、%、vw、vh 単位の違いの詳細な説明

1.ピクセルpx はピクセルの略語で、画面解像度に対する相対的な長さの単位です。 2. えむ参照は親...

Vue プロジェクトにインターフェース リスニング マスクを追加する方法

1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...

MySQL 8.0.15 インストール グラフィック チュートリアルとデータベースの基礎

MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...

MYSQL スロークエリとログの例の説明

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...