2011-09-29 61 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