内容は『Tomcat徹底分析』の第1章の要点と私なりの要約です。不明な点は原書をご確認ください。
1.HTTPプロトコル:
1. 定義: サーバーとクライアント間の通信に使用され、Web サーバーとブラウザーがインターネット上でデータを送受信できるようにするプロトコル。信頼性の高い TCP プロトコルを使用した要求および応答プロトコルです。TCP プロトコルのポートは 80 であり、コネクション型のプロトコルです。
2. HTTP プロトコル リクエストの 3 つのコンポーネント: これらの 3 つの部分はキャリッジ リターンとライン フィード (CRLF) で区切られます。
リクエスト部分:メソッド(GET/POSTなど7種類、他はあまり使われず書籍内で紹介されています) [スペース、内容のこの部分はスペースで区切られています] URI [スペース、内容のこの部分はスペースで区切る] ] プロトコル/プロトコルバージョン
URL は通常、サーバーのルート ディレクトリを基準とした相対的なものであるため、「/」で始まります。
リクエスト ヘッダー: リクエスト ヘッダーには、クライアント環境とリクエストの本文の内容に関する有用な情報が含まれています。たとえば、ブラウザ設定の言語、メイン コンテンツの長さなどが含まれる場合があります。各ヘッダーはキャリッジ リターン ライン フィード (CRLF) 文字で区切られます。
リクエスト本文のコンテンツ: HTTP リクエスト形式の場合、ヘッダーと本文コンテンツの間に復帰改行 (CRLF) があることが非常に重要です。 CRLF は、本文のコンテンツがどこから始まるかを HTTP サーバーに伝えます。一部のインターネット プログラミング書籍では、CRLF は HTTP リクエストの 4 番目の部分ともみなされています。
3. HTTP 応答には次の 3 つの部分も含まれます。
· メソッド - URI (Uniform Resource Identifier) - プロトコル/バージョン
・レスポンスヘッダー
2. サーバーとクライアント間の通信
1. サーバーとクライアント間の通信には、Socket (クライアント) と ServerSocket (サーバー) の 2 つの部分が必要です。
(1) ServerSocket (java.net.ServerSocket、サーバー側ソケット) サーバーソケットを作成するには、ServerSocket クラスが提供する 4 つの構築メソッドのいずれかを使用する必要があります。サーバーソケットがリッスンする IP アドレスとポート番号を指定する必要があります。通常、IP アドレスは 127.0.0.1 になります。これは、サーバー ソケットがローカル マシン上でリッスンすることを意味します。サーバーソケットがリッスンしている IP アドレスは、バインディング アドレスと呼ばれます。サーバー ソケットのもう 1 つの重要な属性はバックログです。これは、サーバー ソケットが受信リクエストの拒否を開始するまでの受信接続リクエストの最大キュー長です。 4 つの構築方法は次のとおりです。
ServerSocket ss = new ServerSocket();//バインドされていない ServerSocket を作成します
ServerSocket ss = new ServerSocket(int port);//特定のポートにバインドされた ServerSocket を作成します
ServerSocket ss = new ServerSocket(int port, int log);//特定のポートにバインドされた ServerSocket を作成し、最大キュー長を設定します。
ServerSocket ss = new ServerSocket(int port, int log, InetAddress address);//特定のアドレスと特定のポートにバインドされた ServerSocket を作成し、最大キュー長を設定します。
InetAddress オブジェクトを構築する簡単な方法は、その静的メソッド getByName を呼び出して、次のコードのようなホスト名を含む文字列と同じです。
InetAddress.getByName("127.0.0.1");
ServerSocket を作成する一般的な方法:
new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));
このコードは、ローカル マシンのポート 8080 をリッスンする ServletSocket を構築し、そのキューの長さは 1 です。
サーバーは作成後、待機状態になります (信頼性の高い伝送プロトコルである TCP プロトコルは同期プロトコルです。つまり、応答がなくなるまで待機します)
(2) ソケット (java.net.Socket クラス、クライアント ソケット): アクセスするサーバーの IP/ホスト名とポート番号を知る必要があります。その後、サーバーにリクエストを送信できます。ソケットの多くの構築方法の 1 つを使用してソケットを作成できます
新しいソケット ("yahoo.com"、80);
Socket クラスのインスタンスを正常に作成したら、それを使用してバイト ストリームを送受信できます。バイト ストリームを送信するには、まず Socket クラスの getOutputStream メソッドを呼び出して、java.io.OutputStream オブジェクトを取得する必要があります。リモート アプリケーションにテキストを送信するには、返された OutputStream オブジェクトから java.io.PrintWriter オブジェクトを構築することがよくあります。接続の他端からバイト ストリームを受信するには、Socket クラスの getInputStream メソッドを呼び出して java.io.InputStream オブジェクトを返します。
(3) サーバーはクライアントの接続要求を accept() メソッドで受け取り、クライアントとの接続を確立し、Socket を返します
ソケット s = ss.
(4) 入力ストリームと出力ストリームは、Socket を通じて取得できます。入力ストリームはクライアントのリクエスト データを読み取るために使用され、出力ストリームはクライアントに応答情報を返すために使用されます。
例: InputStream input = s.getInputStream();
OutputStream 出力 = s.getOutputStream();
3. 簡単な Web サーバー通信の例 (MyEclipse にコピーして表示および実行することをお勧めします)
1.サーバークラス
3. レスポンスクラス
4. サンプルコードの関数の説明: ブラウザーは http://localhost:8080/MyHtml.html などの http リクエストを入力し、サーバーは入力ストリームを使用してリクエストの内容を読み取り、ファイルの場所を取得します。次に、図に示すように、ファイル入力ストリームを使用してファイルのコンテンツを読み取り、最後にブラウザー クライアントに応答を返し、ブラウザー上の HTML ファイルにコンテンツを表示します。
5. サンプルコードの機能横断的なフローチャート:
以上がTomcat学習記(1) 簡単なWebサーバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。