Java 奇怪的servlet响应问题

Java 奇怪的servlet响应问题,java,servlets,download,response,Java,Servlets,Download,Response,我有一个servlet,它正在生成一个.xls文件,然后将生成的文件发送给用户下载,代码如下: // Write the output to a file Calendar currentDate = Calendar.getInstance(); SimpleDateFormat formatter= new SimpleDateFormat("yyyy_MMM_dd"); String dateNow = formatter.format(currentDate.getTime());

我有一个servlet,它正在生成一个
.xls
文件,然后将生成的文件发送给用户下载,代码如下:

// Write the output to a file
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= 
new SimpleDateFormat("yyyy_MMM_dd");
String dateNow = formatter.format(currentDate.getTime());

String path = "webapps/myapp/exports/";
String fileName = ("Table_export_"+ dateNow + ".xls");

FileOutputStream fileOut = new FileOutputStream(path+fileName);
wb.write(fileOut);
fileOut.close();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
文件以5 kb的大小保存在服务器上,但在浏览器对话框中选择“保存”或“打开”后,文件为空,大小为0 kb。我不明白怎么了

我与这个问题斗争了大约2个小时,但没有成功。我已尝试设置完整路径:

response.setHeader("Content-Disposition","attachment;filename="path+fileName);
但是我得到了一个名字很奇怪的文档,它也是0 kb


我很确定我遗漏了一些非常小的东西,但作为一名初级开发人员,我仍然无法找到它。

因为您已经有了一种可以将文件写入输出流的方法,您只需通过以下方式更改代码即可将其发送给用户:

Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MMM_dd");
String dateNow = formatter.format(currentDate.getTime());

String fileName = ("Table_export_"+ dateNow + ".xls");

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);

OutputStream outputStream = response.getOutputStream();
try {
    wb.write(outputStream);
} finally {
    outputStream.close();
}
但它不会保存在服务器硬盘上


HttpServletResponse#getOutputStream()方法允许您访问将发送回客户端的字节流。

当您使用以下格式时-

String path = "webapps/myapp/exports/";
String fileName = ("Table_export_"+ dateNow + ".xls");
...
response.setHeader("Content-Disposition","attachment;filename="path+fileName);
文件名是否为“webapps%2Fmyapps%2Fexports%2fetable\u export\uuxls”


Als文件大小应该为零,因为您没有在文件中放入任何数据

您是要在HTTP响应中发送文件还是什么?很抱歉,我无法理解您的代码。是的,我正试图这样做。但您正在将文件保存到文件系统中!如果要通过HTTP发送文件,必须将字节写入HTTP response.Oh中的
OutputStream
。是否有方法返回保存在本地服务器磁盘上的文件?我认为您需要根据文件大小设置内容长度头文件,并尝试在发送内容之前设置头文件,我的意思是将wb.write(fileOut)放出来;最后,非常感谢你!!!这正是我要找的!你太棒了!再次感谢!