スタートはまず、我々はどのように我々がアクセスそれにどのリソースのクライアントを知っていますか、リソースにアクセスできるクライアントを知るために必要なすべての、クライアントの要求を処理しますか?
もちろん、答えはURIが、サーバ側でクライアントがリクエストラインプロトコルのHTTPリクエストでリクエストURIを要求し得ることです。我々は、データ要求プロトコルの最初の行を読み取る必要があるので、
そして、サーバ側でどのリソースにアクセスしたい顧客に達するために、これらのデータからURIを解析。
どのような(1)URLとURIとは何ですか?それらの間の関係は何ですか?
A、URL(ユニフォームリソースロケータ)は、ブラウザのアドレスバーにパスを要求するなどのユニフォーム・リソース・ロケータは、直接http://127.0.0.1:8080/oa/index.htmlネットワークによって配置することができるURL、ですリソースインチ
B、URI(ユニフォームリソース識別子)は、ユニフォームリソース識別子が、ネットワークリソースの名前の代わりに、位置決め機能を有していない、またはURIはURLの一部です。例えば、/oa/index.html上記のURLはURIです。
要求行(2)HTTPプロトコル要求プロトコルは、3つの部分で構成さ:契約のリクエストメソッド+ URI +バージョン、我々はURIがライン上にある要求を取得する必要があります
(3)読み取り要求HandlerRequest.java行でプログラムを書いて
A、クライアント要求を解析する文字列は、URI傍受
要求メッセージをBufferedReaderを取得し、Bを
BR = BufferedReaderの新しい新しい BufferedReaderの(新しい新しいInputStreamReaderの(clientSocket.getInputStream())); // 取得requestURI :.ストリングrequestURI = br.readLine( )スプリット( "")[1]; プリントアウトコンソールにrequestURI
(4)URLを入力して、ブラウザを開き、HttpServerをを起動します。http://127.0.0.1:8080 / OA / index.htmlにアクセステスト
パッケージcom.zda.httpserver.core。 輸入java.io.BufferedReader; インポートにjava.io.IOException; 輸入java.io.InputStreamReader; インポートのjava.net.Socket; 輸入com.zda.httpserver.util.Logger; / ** *处理客户端请求 * @author ZDA * @version 1.0 * @since 1.0 * / パブリック クラス HandlerRequest 実装Runnableを{ 公共ソケットclientSocket。 公共HandlerRequest(ソケットclientSocket){ この= .clientSocket clientSocket ,; } @Override 公共 無効RUN(){ // クライアントの要求 をBufferedReader BR = ヌル; Logger.log( "HTTPServerのスレッド:" + 。にThread.currentThread()のgetName()); 試み{ // クライアントメッセージ受信 BRを= 新しい新しい BufferedReaderの(新しい新しいInputStreamReaderの(clientSocket.getInputStream())); // 印刷クライアントのメッセージ / * ストリングTEMP = NULL; (!(br.readLine のTEMP =())= NULL)、一方{ システム.out.println(TEMP)。 } * / //取得要求プロトコルの要求行 の文字列リクエストラインbr.readLine =(); // GET HTTP / 1.1 /oa/index.html // URIを取得します- >要求行(リクエストライン) - >実施形態リクエストURI要求プロトコルバージョン- > 3空間を介して接続されている人との間の 文字列requestURI requestLine.split =( "")[1]; // { "GET"、 "/ OA / index.htmlを"、 "HTTP / 1.1"} のSystem.out.println (requestURI); } キャッチ(例外E){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } 最後に{ // 閉じる資源 IF(BR =!ヌル {){ 試みる )(br.closeします。 } キャッチ(IOExceptionを電子){ // TODO自動生成されたcatchブロック e.printStackTrace(); } } もし(!clientSocket = NULL ){ 試み{ clientSocket.close()。 } キャッチ(IOExceptionを電子){ // TODO自動生成されたcatchブロック e.printStackTrace(); } } } } }
輸出
リクエストの上の複数:
これは、リソースを取得するためにユーザが要求されなければならないことを確保するための要求を送信するために何度も基礎となるブラウザの独自のメカニズムです。