技術共有

Tomcatの原理、構造、設計パターン

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1 何

Java サーブレットおよび JSP テクノロジを実行する Web サーバーは、Java Web の実行環境を提供し、http プロトコルを通じてクライアント要求を処理できます。つまり、tomcat = http サーバー + サーブレット コンテナーです。類似商品としては「桟橋」などがあります。

  • ウェブアプリケーション : Web アプリケーションとは、Web ブラウザを通じてアクセスされるアプリケーションを指します。Web テクノロジと標準 (HTTP、HTML、CSS、JavaScript など) を使用してユーザー インターフェイスを提供し、ユーザーと対話します。 Web アプリケーションには、フロントエンド コンポーネントとバックエンド コンポーネントを含めることができます。フロントエンドはユーザー インターフェイスとプレゼンテーションを担当し、バックエンドはビジネス ロジックとデータ処理を担当します。
  • サーブレット : サーブレットは Java EE 仕様の一部であり、クライアント (Web ブラウザなど) からのリクエストを受信し、これらのリクエストを処理するために使用されます (データベースへのアクセス、ビジネス ロジックの呼び出しなど)。 )、クライアントに応答を返します。 サーブレットは、動的な Web コンテンツを構築するためのコア テクノロジーの 1 つです。

2 構造

コネクタ コネクタ+コンテナ

コンテナはエンジン、ホスト、コンテキスト、サーブレット/ラッパーです

したがって、アーキテクチャはサービス (ポート 8080)、コネクタ、エンジン、ホスト (http:localhost.com)、コンテキスト (/mvc、Web アプリケーション)、サーブレット/ラッパー (/add、サーブレット) です。

f090bd57045f4088948e1e7da63585ca.png

 

3 つの主要コンポーネント

3.1 コネクタ

3.1.1 エンドポイント

用途: ネットワーク層通信 tcp/ip (NIONIO2 など)

3.1.2 プロセッサ

用途: http などのアプリケーション層プロトコル分析

3.1.3 アダプタ

用途: 統合変換。 Tomcatのリクエスト/レスポンスはサーブレットのリクエスト/レスポンスに変換され、コンテナコンテナに渡されます。

  • サーブレット リクエストは、Java サーブレット API の重要なインターフェイスです。
  • Java Servlet API は、サーバーサイド Java アプリケーションを開発するための Java EE (現在は Jakarta EE として知られています) のインターフェイスとクラスのセットです。 サーブレットは、JavaWeb の 3 つの主要コンポーネント (サーブレット、フィルター、リスナー) の 1 つで、主にクライアントの要求を処理し、応答を生成するために使用されます。

3.2 デザインパターン

3.2.1 変化点と不変点の設計思想

不変点は抽象クラスおよびインターフェイス (ProtocolHanlder、AbstractProtocol など) で実装され、変更点は具象クラス (Http11NioProtocol、Http11Nio2Protocol など) で実装されます。

47fd583736914b5e9911f0e38c739565.png

27e141a1618a4d7b8977cd9fc5a4f24a.png

f646124c6f57416c8648621ea75dbfa3.png

2357e1b0231e4de2b32e8c70f79b00b6.png

6fc9747fa2b14a649d16a3e70e00650d.png

d81414cef6f5481a87660f58599c0e96.png

3.2.2 アダプターモード

アダプタ、Tomcat は CoyoteAdapter を使用します。


3.2 コンテナ

3.2.1 エンジン、ホスト、コンテキスト、サーブレットを管理し、組み合わせモードを使用してそれらすべてにコンテナを実装させる方法

  • 複合パターンは、オブジェクトをツリー構造に結合して「部分全体」の階層を表現できる構造設計パターンです。このモードでは、クライアントによる単一オブジェクトと複合オブジェクトの使用は一貫しています。つまり、クライアントは単一オブジェクトとその組み合わせを同じ方法で処理できます。

端的に言えば、クラス/インターフェイスを使用してツリー構造(親子関係)を組み立てます。これらはすべて同じインターフェイスを実装しているため、各部分への呼び出しは同じです。以下に示すように

d785e0ea64ad4fb6952f9460fcbef154.png

3.2.2 エンジン、ホスト、コンテキスト、およびサーブレットは、責任連鎖モデル Pipeline-Valve を使用して、順番に呼び出されます。

パイプラインは責任の連鎖とキューであり、キュー内の要素はバルブです。 バルブは処理ロジックを実行し、それを次の値に転送できます。

バルブとフィルターの違い: バルブは Tomcat からのもので、フィルターは Java サーブレット API からのものです。 バルブは Web コンテナー レベルで動作し、すべてのアプリケーション リクエストをインターセプトします。フィルターはアプリケーション レベルで動作し、特定の Web アプリケーション リクエストをインターセプトします。

08b1200a4585496e98a08c964952573a.png

3635bb9b0a7c46a1997621631c00212c.png

acb7a18568bd41c1b4ded295aeee2060.png

d28296d8ebba41d5acc6c209df8c0538.png

3.2.3 エンジン管理のライフサイクルと割り当てリクエスト

割り当てリクエスト: マッピング マッパー コンポーネント。 URL に従って、対応するラッパーをレイヤーごとに検索します。

ライフサイクル: コンテナの作成、初期化、起動、破棄などを担当します。すべてのコンテナはライフサイクルを継承します。つまり、組み合わせモードでもあります。

オブザーバー パターンも使用されます (ライフサイクル ステータスの変化を監視)。

結合モード(ツリー構造に親子関係がある)、

テンプレート設計パターン (汎用テンプレート (一般的なロジック) を作成し、テンプレート内で新しいメソッドを呼び出し、新しいメソッドを具体的な方法で実装します)

 

4 アーキテクチャ設計

  1. ニーズをリストアップする
  2. オブジェクト指向設計クラス
  3. 需要の変化している点と変化していない点を見つける
  4. 変更点は抽象クラスを使用して実装され、不変点は具象クラスを使用して実装されます。