我用java socket編程,寫了一個簡單的服務器,並旨在使該提供的2個文件下載和顯示一些HTML響應時,下載完了。我所做的是使用PrintWriter.print或DataOutPutStream.writeBytes將包含html標記和響應字符串的字符串發送到瀏覽器,然後使用OutputStream.write發送請求的文件。我在瀏覽器中輸入網址的就像127.0.0.1/test1.zip,相關的代碼片段如下:問題發生時使用的OutputStream和(或DataOutputStream類的PrintWriter)
pout.print("<html>");
pout.print("<head>");
pout.print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1/\">");
pout.print("<title>Response</title>");
pout.print("</head>");
pout.print("<body>");
pout.print(createResponseHeader(200, fileTypeCode));
pout.print("</body>");
pout.print("</html>");
pout.print(createResponseHeader(200, fileTypeCode));
pout.flush();
byte[] buffer = new byte[client.getSendBufferSize()];
int bytesRead = 0;
System.out.println("Sending...");
while((bytesRead = requestedFile.read(buffer))>-1)
{
out.write(buffer,0,bytesRead);
}
的撅着嘴是一個PrintWriter,而出來的OutputStream中。 問題是當我嘗試使用127.0.0.1/test2.zip下載文件時,它不讓我下載,而是在瀏覽器中打印出響應字符串和很多無意義字符,例如,
HTTP/1.0 200 OK
連接:關閉
服務器:COMP5116分配服務器V0
內容類型:應用程序/ x-ZIP壓縮
我相信它只是顯示壓縮文件作爲字符串與響應頭一起。看起來在發送文件的代碼之前使用PrintWriter之後,整個輸出流用於發送字符串而不是字節。但是,如果我在發送文件的代碼之後放置了發送響應的代碼部分,則下載工作正常,但瀏覽器中沒有任何響應消息打印出來,只是一個空白頁面。
謝謝您的回覆,但我不想讓它變得如此複雜,只有POJO就夠了,但無論如何,再次感謝您的回覆。 – user736644 2011-05-03 22:39:05
是的,我認爲這會很複雜。基本的是,你不能用一個servlet來做你想要的,因爲你不能混合html和二進制數據。 – stivlo 2011-05-04 02:11:00