我使用struts2和servlet。 (由于第三方ajax与servlet一起提供的东西)。
我的一个表单是发布到servlet。 (名称“/exclude/new.srl”) 我已将struts2设置为忽略对“exclude”命名空间的所有请求。 所以请求到达servlet就好了。
servlet完成它的工作,然后在结束之前继续执行以下操作:
response.getOutputStream().print("'OK'");
response.getOutputStream().close();
现在我不详细了解第三方软件,所以我不完全确定,但我认为OK语句告诉我的第三方ajax-solution关闭表单并刷新页面的一些内容。
一切正常。
现在我正在尝试为此添加一个新位。我想发送一个文件给用户。换句话说,当提交表单时,仍然会发生以前发生的所有事情,但也应该要求用户保存或打开文件。
所以我创建了一个struts2动作,它将返回文件,没问题。 但是我如何编程servlet将此文件推送给用户并且还返回响应OK? 我不需要使用struts2动作来推送文件,如果可以在完全可以接受的servlet中完成的话。
任何?
答案 0 :(得分:1)
您可以发送文件
// Set the headers.
res.setContentType("application/x-download");
res.setHeader("Content-Disposition", "attachment; filename=" + filename);
// Send the file.
OutputStream out = res.getOutputStream();
File file = new File(yourPath);
response.setContentLength((int) file.length());
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
int readBytes = 0;
while ((readBytes = buf.read()) != -1)
stream.write(readBytes);
buf.close();
stream.close();
但是我如何编程servlet将此文件推送给用户并且还返回响应OK?
我认为这是不可能的。来自servlet的响应具有tyle,由content-type表示。如果将其设置为下载,则无法发送正常响应,这意味着您无法发送“确定”。
答案 1 :(得分:0)
您可能必须设置未提及的第三方ajax-solution 以在表单提交成功时转发到文件操作/ servlet URL(即在表单提交后重定向到文件下载)。< / p>