2009-08-17 12 views
0

静的なページのみを扱うWebサーバーを実装しようとしています。 私の超ミニウェブサーバーのコードはここにあります。mozilla firefoxの予期しない動作

import java.io.*; 
import java.net.*; 

class MyWebServer{ 

    static ServerSocket serSocket = null ; 

    static{ 
     try { 
      serSocket = new ServerSocket(80) ; 
      System.out.println("Server started successfully....\n\n") ; 
     } catch (IOException io) { 
      System.out.println(io.getMessage()); 
      System.exit(1) ; 
     } 
    } 

    public static void main(String []args){ 

     while(true){ 
      try { 
       new Thread(new ServingThread(serSocket.accept())).start() ; 
      } catch (IOException io) { 
       System.out.println(io.getMessage()); 
      } 
     } 
    } 
} 

class ServingThread implements Runnable{ 
    private Socket socket ; 

    public ServingThread(Socket socket){ 
     this.socket = socket ; 
     System.out.println("Receives a new browser request from " + socket); 
    } 

    public void run() { 
     BufferedReader in = null ; 
     PrintWriter out = null ; 

     try { 

      //reading request headers from browser starts here 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      String str = "."; 
      while (!str.equals("")){ 
       str = in.readLine(); 
       //System.out.println(str); 
      } 
      System.out.println("\n\n"); 
      //reading request headers from browser ends here 


      //writing output on outputstream starts here 
      out = new PrintWriter(socket.getOutputStream(), true) ; 

      int i = (int) (Math.random() * 10) ; 
      out.println(i) ; 
      System.out.println(i) ; 
      //writing output on outputstream ends here 

      socket.close() ; 
      System.out.println("Request successfully fulfilled.\n") ; 
     } 
     catch (IOException io) { 
      System.out.println(io.getMessage()); 
     } 
    } 
} 

それは正常に動作しますが、いくつかの回(常にではない)私は新しいタブ(Ctrlキー+ T)を追加 とき

  • 私のMozilla Firefoxのクライアント は自動的に、要求を送信したり閉じ既存のタブ
  • http://localhost/をリクエストすると、ブラウザに1桁の数字が表示されます。しかし、 サーバのコンソールには、2 または3つの要求があることが示されているので、それに応じて2または3の数字 が表示されます。

私はたくさんのことを知りましたが、これについては満足のいく答えが得られません。

すべての考え/説明は高く評価されます。 :)

+0

Javaにする必要はありますか? Mac、Windows、Linux上のUSBドライブから実行されるRubyの超小型ウェブサーバです。 Pinky:http://yellosoft.us/index.php?id=86 – mcandre

+0

はい、私はjavaを使用しています。任意のJavaリンク:-)。 – mogli

答えて

1

まず、私はソケット/ http/etcについて学ぶ練習としてこれをやっていると仮定しています... の場合、実際にはのWebサーバーを実装しようとすると、既存のものを使用するか、少なくともソースを見ることを真剣に検討してください。最も単純なHTTPサーバーの実装でさえ、たくさんのものがあります。

あなたの "サーバー" :-)はHTTPを正しく実装していないので(ステータスコードは返されません)、ブラウザの動作が実際には不明です。同じ要求を複数回試行するか、それはできません。キャッシングの問題もここにあるかもしれません.HTTPを実装すると、「新しいタブ」にリクエストを繰り返さないようにするには、適切なキャッシュヘッダーを送信する必要があります。

+0

ソースコード付きの単純化されたJava実装Webサーバーのオンラインリファレンス。 :-) – mogli

+0

OSのJava Webサーバーの一覧は次のとおりです。http://java-source.net/open-source/web-serversそして、ここに(非常に時代遅れですが、それでも役に立つ)チュートリアルがあります。http://java.sun.com/developer/technicalArticles/Networking/Webserver/ Googleにはかなりのリンクがあります。http: /www.google.com/search?source=ig&hl=en&rlz=&q=simple+java+web+server – ChssPly76

+0

thnx ChssPly。私はすでに第二のリンクで終わっています。また、HTTPを適切に実装しません。 – mogli

関連する問題