15分でHTTPサーバー

挑戦する



最短時間でHTTPサーバーを作成します。HTTPサーバーは、起動後にブラウザーに正しく応答し、シンプルなHTMLページを提供します(最小限の時間で、十分なコードがないため、初心者が侵入しやすくなります)。

約15分かかりました。 サーバーはタスクに対処しているようです。



この例の本質は、Socket、ServerSocket、InputStream、OutputStream、およびThreadが何であるかを示すことです。





解決策



 import java.net.ServerSocket;
 import java.net.Socket;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.InputStreamReader;
 import java.io.BufferedReader;

 / **
  * yar 09/09/2009により作成
  * /
パブリッククラスHttpServer {

     public static void main(String [] args)throws Throwable {
         ServerSocket ss =新しいServerSocket(8080);
         while(true){
            ソケットs = ss.accept();
             System.err.println(「クライアント受け入れ」);
            新しいスレッド(新しいSocketProcessor(s))。start();
         }
     }

    プライベート静的クラスSocketProcessorはRunnable {

        プライベートソケット
        プライベートInputStreamは;
        プライベートOutputStream os;

         private SocketProcessor(Socket s)throws Throwable {
             this.s = s;
             this.is = s.getInputStream();
             this.os = s.getOutputStream();
         }

         public void run(){
             {
                 readInputHeaders();
                 writeResponse( "<html> <body> <h1> Habrahabrからこんにちは</ h1> </ body> </ html>");
             } catch(Throwable t){
                 / *何もしない* /
             }最後に{
                 {
                     s.close();
                 } catch(Throwable t){
                     / *何もしない* /
                 }
             }
             System.err.println(「クライアント処理が終了しました」);
         }

         private void writeResponse(String s)throws Throwable {
            文字列応答= "HTTP / 1.1 200 OK \ r \ n" +
                     「サーバー:YarServer / 2009-09-09 \ r \ n」+
                     「コンテンツタイプ:テキスト/ html \ r \ n」+
                     「コンテンツ長:」+ s.length()+「\ r \ n」+
                     「接続:閉じる\ r \ n \ r \ n」;
            文字列の結果=応答+ s;
             os.write(result.getBytes());
             os.flush();
         }

         private void readInputHeaders()throws Throwable {
             BufferedReader br = new BufferedReader(new InputStreamReader(is));
             while(true){
                文字列s = br.readLine();
                 if(s == null || s.trim()。length()== 0){
                    休憩;
                 }
             }
         }
     }
 }




実行方法



1)HttpServer.javaファイルを作成します

2)このファイルにソーステキストを挿入します

3) javacコマンドHttpServer.javaでコンパイルします

4)コマンドjava -cpを実行します HttpServer (ポート8080は空いている必要があります)

5)ブラウザを開き、リンクhttp:// localhost:8080 /に移動します



All Articles