1

所以我有一个任务,我必须用选择的编程语言制作一个 HTTP 服务器。没什么大不了的。我遇到了一个我似乎无法弄清楚的问题。每次我加载主页和服务器响应时,它都会打印大约 5 次。想不通为什么。好的,我的意思是:

代码片段:

while(true){
    connectedClient = listenSocket.accept();

    inFromClient = new BufferedReader( new InputStreamReader( connectedClient.getInputStream()));

    outToClient = new DataOutputStream(connectedClient.getOutputStream());

    String requestString = inFromClient.readLine();
    String headerLine = requestString;

    StringTokenizer tokenizer = new StringTokenizer(headerLine);
    String httpMethod = tokenizer.nextToken();
    String httpQueryString = tokenizer.nextToken();

    requestString = inFromClient.readLine();
    if (httpMethod.equals("GET")) {
        if (httpQueryString.equals("/Home")) {
        // The default home page status code 200
        dateHeader();
        connectionCloseHeader();    
    }
//other code not related
}

这是我的日期标题方法:

public static void dateHeader() throws Exception{
    DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z");
    Date date = new Date();
    System.out.println("Date: " + dateFormat.format(date));
}

我到终端的输出将是日期的 5 个打印输出。我确保连接等已关闭,但同样的事情发生了。任何人都知道为什么会这样?谢谢。

编辑

似乎在使用 Chrome 时,我可以打印出来没有问题。我正在使用 Opera 进行测试,这给了我 5 个打印输出。也许浏览器的工作方式导致了这个问题。不过,我现在只使用 chrome。

4

1 回答 1

2

I can't account for five different invocations right off, but if you're using a typical browser to hit this HTTP server, you'll immediately see two requests: one for the resource itself and one for a favicon.ico. Somewhere in your request handler, you should read in and print out the entire request. Then you can see exactly what all the requests are for.

于 2011-09-29T03:00:40.830 回答