返回在servlet中创建的excel文件作为响应

我使用Apache POI创建了excel文件,并尝试将其作为对ajax调用的响应返回。 我希望浏览器提示“保存创建的文件”窗口。 问题是我在servlet的响应中得到了gibbrish并且没有提示或任何提示

我在StackOverflow上发现了类似的问题,但是他们问题的解决方案对我不起作用(或者我错过了一些东西)。

这里的问题是通过使用html标签解决的,但我不能(据我所知)在SAPUI5中使用它们。

这是一个非常类似的案例,我用于我的事情,但它仍然无效。

这是客户端代码:

jQuery.ajax({ url : "Export", type : "post", mimeType: 'application/vnd.ms-excel', success : function(){ console.log("data was exported successfully"); }, error: function(){ console.log("error while exporting data"); }, complete: function(){ console.log("exporting data has been completed"); } }); 

这是servlet的代码:

  response.setContentType("application/vnd.ms-excel"); response.setHeader("Expires", "0"); response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); response.setHeader("Pragma", "public"); response.setHeader("Content-Disposition", "attachment; filename=ReportsData.xls"); ServletOutputStream out = response.getOutputStream(); workbook.write(out); out.flush(); out.close(); 

该文件是在while(result.next())循环中从数据库’select’wuery结果集创建的。

谢谢!

而不是使用ajax尝试在javascript中进行这样的调用。

 window.open(("urltoyourservlet"), "_blank"); 

这将打开一个直接链接到您的servlet的新窗口。 然后浏览器应该自动处理基于mime /类型下载excel文件的句柄。