我有一个简单的JSP页面,其中包含2个按钮:View和Export。单击“查看”按钮时,我将从数据库中获取数据,将副本保存到会话中,并将HTML代码写入带有数据的标签中。稍后当用户单击“导出”时,我想在服务器中生成一个excel文件(使用会话中的数据)并将其下载到客户端。
在服务器端成功创建了Excel文件。我正在使用来自客户端的AJAX请求从服务器下载Excel文件。
JSP代码:
try{
String filepath=ExportToExcel(session.getAttribute("InvestmentDetails"));
//Setting file to download
response.setContentType( "application/x-download");
response.setHeader("Content-Disposition","attachment; filename=\"SIPInvestment_531.xls\"");
response.setStatus(200);
InputStream in = null;
ServletOutputStream outs = response.getOutputStream();
try {
File filetodownload=new File(filepath);
response.setContentLength(Integer.parseInt(String.valueOf(filetodownload.length())));
in = new BufferedInputStream(new FileInputStream(filetodownload));
int ch;
while ((ch = in.read()) != -1) {
outs.print((char) ch);
}
}
finally {
if (in != null) in.close();
}
outs.flush();
outs.close();
}
catch(Exception ex){
str=ex.getMessage();
}
这是Javascript:
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
}
}
xmlhttp.open("POST","/SIP/rptClientInvestmentDetails.jsp?requesttype=export",false);
xmlhttp.send();
请求到达JSP页面。没有任何例外,它写入响应输出流。但是没有从浏览器弹出下载。可能是什么问题?
答案 0 :(得分:2)
Ajax应该用于元语言,而不是二进制文件。
一个简单的
<a href="/SIP/rptClientInvestmentDetails.jsp?requesttype=export"
target="_blank">Export</a>
就是你所需要的一切。
如果您确定说response.setHeader("Content-Disposition","attachment
,则应删除目标属性,如BalusC建议的那样。
答案 1 :(得分:0)
我认为你可以使用location.href =“提供java类函数名”。这会将控件从jsp转移到java函数而不使用ajax调用