2011-09-29 37 views
1

所以我有一个任务,我必须用选定的编程语言创建一个HTTP服务器。没什么大不了。我遇到了一个我似乎无法解决的问题。每次我加载主页和服务器响应时,它会打印出大约5次。不能找出原因。好了,所以我的意思:HTTP Server System.out问题

代码段:

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。

+0

因此,返回的页面反过来引用如图像,CSS,JS和一些资源,其网页浏览器需要下载呢? – BalusC

+0

它现在所做的只是向浏览器输出一条消息。该页面现在不传递任何内容。只是一个简单的客户消息。但我似乎已经找出了这个问题。 – yaegerbomb

回答

2

我无法解释五种不同的调用正确的了,但如果您使用的是典型的浏览器,以达到此HTTP服务器,你会马上看到两个请求:一个是资源本身,一个用于图标。 ICO。在您的请求处理程序的某处,您应该读入并打印出整个请求。然后你可以看到所有的请求是什么。

+0

hrmm我确实使用浏览器进行连接。我有一个例子,我已经测试过相同的东西,它有点复杂,它给了我3-5个不同的端口被接受。也许同样的事情正在发生?我不确定。我尝试使用不同的浏览器。 – yaegerbomb

+0

hrmm我想我明白了为什么。我正在使用Opera来连接到服务器,并且我得到了5个广告。但是,如果我使用铬我得到1.我有理论为什么发生这种情况,但不知道。尽管如此,你帮助我了解了一些东西,谢谢! – yaegerbomb