Java mozilla firefox的意外行为

Java mozilla firefox的意外行为,java,Java,我正在尝试实现一个只为静态页面服务的web服务器。 这是我的超迷你网络服务器的代码 import java.io.*; import java.net.*; class MyWebServer{ static ServerSocket serSocket = null ; static{ try { serSocket = new ServerSocket(80) ; System.out.println("S

我正在尝试实现一个只为静态页面服务的web服务器。 这是我的超迷你网络服务器的代码

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());
        }
    }
}
它工作正常,但有时(不总是)

  • 我的mozilla firefox客户端 当我 添加新选项卡(Ctrl+T)或关闭 “现有”选项卡
  • 当我要求 ,在我的浏览器上显示一位数。但是 服务器的控制台显示它得到2 或3个请求,因此,它显示2或3个数字 因此
我在谷歌上搜索了很多,但没有得到令人满意的答案


非常感谢您的任何想法/解释。:)

首先,我假设您这样做是为了学习sockets/http/等。。。因为如果你真的想要实现一个Web服务器,你应该认真考虑使用一个现有的服务器,或者至少看看它的来源——即使是最简单的HTTP服务器实现也有很多东西。
也就是说,您的“服务器”:-)没有正确实现(例如,不返回状态代码),因此浏览器的行为在这里实际上是不确定的-它可能会多次尝试重试同一请求,也可能不会。缓存问题也可能在这里起作用-一旦您实现了HTTP,如果您不希望“新标签”重复请求,您需要发送适当的缓存头。

它必须是Java吗?这是一个使用Ruby的超小型web服务器,它在Mac、Windows和Linux上通过USB驱动器运行。是的,我在用java。任何java链接:-)。使用源代码为简单java实现的web服务器提供的任何在线参考。:-。以下是操作系统java web服务器的列表:。这里有一个(相当过时,但仍然有用)关于编写一个的教程:谷歌也提供了很多链接:thnx ChssPly。我已经完成了第二个链接。它也没有正确地实现HTTP,实际上是这样的。当然,HTTP协议的子集非常有限,但它可以正确地处理GET/HEAD方法并返回状态代码。