Webサーバーは、HyperText転送プロトコルサーバーとも呼ばれます。彼らはHTTPを使用してクライアントと通信します。 JavaベースのWebサーバーは、2つの重要なクラスを使用します。
java.net.socket class and java.net.serversocketクラス、およびHTTPメッセージの送信に基づいて通信します。
このシンプルなWebサーバーには、次の3つのクラスがあります。
*httpserver
*リクエスト
*応答
HTTPSERVERクラスでのアプリケーションのエントリであるmain()メソッドは、HTTPServerインスタンスを作成し、await()メソッドを呼び出します。名前が示すように、 await()メソッドは、指定されたポートのHTTP要求を待機し、処理してから、クライアントに応答メッセージを送信します。シャットダウンコマンドが受信されるまで待機し続けます。
このアプリケーションは、HTMLファイルや画像など、指定されたディレクトリにある静的リソースのリクエストのみを送信し、着信HTTPリクエストバイトストリームをコンソールに表示することもできますが、日付やCookieなどのヘッダー情報をブラウザーに送信しません。
リクエスト:
パッケージcn.com.server; Import java.io.inputStream; public class request {private inputstream input; private string uri; public -stream input){this.input = input;} public void parse(){//ソケットストリングバッファーリクエストから文字のセットを読む= new Stringbuffer(2048); {i = input.read(buffer);} catch(exception e){e.printstacktrace(); i = -1;} for(int j = 0; j <i; j ++){request.append((char)buffer [j]) requestString){int index1、index2; index1 = requestString.indexof( ""); if(index1!= -1){requestString.indexof( ""、index1+1); if(index2> index1){return requeststring.substring(index1+1、index2);リクエストクラスは、HTTPリクエストを表します。 inputstreamオブジェクトを渡してリクエストオブジェクトを作成できます。 inputstreamオブジェクトのread()メソッドを呼び出して、HTTP要求の元のデータを読み取ることができます。
上記のソースコードのparse()メソッドは、HTTP要求の元のデータを解析するために使用されます。 parse()メソッドは、 parseUrI() privateメソッドを呼び出して、要求されたuriを解析します。これとは別に、あまり作業はありません。 parseUri()メソッドは、uriを可変URIに保存し、public getUri()を呼び出すと、要求されたURIが返されます。
応答:
パッケージcn.com.server; Import java.io.file; Import java.io.fileinputStream; Import java.io.ioexception; Import java.io.io.outputStream;/** * http Response = status-line *((General-Header | Response-Header | Entity-Header)crlf) * crlf * light-light-light-light-light-light-light-liseステータスコードSP RESON-PHRASE CRLF * */public class Response {private static final int buffer_size = 1024; request request; outputstream output; public response(outputstream output){this.output = output;} public void setRequest(リクエストリクエスト){this.request =リクエスト; byte [buffer_size]; fileinputStream fis = null; try {file file = new file(httpserver.web_root、request.geturi()); if(file.exists()){fis = new fileinputStream(file); int ch = ch = fis.read(bytes); 0、buffer_size); ch = fis.read(bytes、0、buffer_size);}} else {// fund not inount string errormessage = "http/1.1 404ファイルが見つかっていない/r/n"+ "content-type:text/html/r/n"+ "content-length:23/r/r/r/r/r/r/n"+ fund </h1> "; output.write(errormessage.getBytes());}} catch(excepsion e){system.out.println(e.tostring());}最後に{if(fis!= null){fis.close(}}}}}}}}}}応答オブジェクトは、ソケットで取得した出力ストリームを渡すことにより、httpserverクラスのawait()メソッドで作成されます。
応答クラスには、 setRequest()とsendStaticResource() 2つのパブリック方法があります。 setRequest()メソッドは、パラメーターとしてリクエストオブジェクトを受信します。 sendStaticResource()メソッドは、HTMLファイルなどの静的リソースをブラウザに送信するために使用されます。
httpserver:
パッケージcn.com.server; import java.io.file; import java.io.inputStream; Import java.OutputStream; Import java.net.inetAddress; Import java.net.serversocket; Import java.net.socket; public class httpserver *このパッケージの場合、web_rootは *ワーキングディレクトリの下の「WebRoot」ディレクトリです。 *ワーキングディレクトリは、Javaコマンドが呼び出された場所からファイルシステム内の場所です。 */public static final string web_root = System.getProperty( "user.dir")+file.separator+"webroot"; private static final string shutdown_command = "/shutdown"; private boolean shutdown = false; public static void main(string [] args){httpserver server = new httpserver await(){serversocket serversocket = null; int port = 8080; try {serversocket = new Serversocket(port、1、inetaddress.getByname( "127.0.0.1");} catch(Exceals e){e.printstacktrace(); system.exit(0);} while input = null; outputStream output = null; try {socket = serversocket.accept(); input = socket.getinputStream(); output = socket.getOutputStream(); //リクエストオブジェクトと解析要求= new request(input); request.parse(); response(output); response.setRequest(request); respons.sendstaticResource();} catch(exception e){e.printstacktrace(); contion;}}}}}}このクラスは、Public Static変数の最終Web_Rootおよびすべてのサブディレクトリによって指定されたディレクトリを含む、指定されたディレクトリの静的リソースのリクエストを処理できるWebサーバーを表します。
index.htmlという名前のWebRootでHTMLページを作成すると、ソースコードは次のとおりです。
<!doctype html> <html> <head> <meta charset = "utf-8"> <title> insert here
次に、Webサーバーを起動し、index.htmlの静的ページをリクエストします。
対応するコンソールの出力:
このようにして、単純なHTTPサーバーが完了します。
上記は、Simple Web Serverインスタンス分析のJava実装に関するすべてです。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!