我用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