[求助]调用完IE提供的下载对话框完成CSV文件下载后如何关闭IE窗口?
已google过了。也已搜索了精华区。但是还没有一个解决方案。因此希望在这里能够得到解决。
[问题背景]:我想实现一个csv文件导出的功能。
[软件环境]:windowsxp,IE6.0
[问题描述]:我是用一个jsp页面来调用一个servlet来实现csv的动态生成。当servlet运行时会调用IE的下载对话框来实现将csv文件导出到客户机上。问题是,用户完成下载后要求将谈出该下载对话框的IE窗口(即那个调用servlet的jsp)关掉。我已做了以下尝试:
法一:在servlet用forward到一个jsp来关闭这个对话框。但是由于在此之前,已将数据由servlet写到浏览器,因此根据Servlet API spec会有IlleagalStateException抛出,从而导致无法关闭页面。
法二:在jsp中加入javascript代码:调用servlet后,就用parent.close()来试图关掉那个jsp,可是还是不行!以下附上部分代码:
[代码片断]
1-〉jsp代码:
。。。
<SCRIPT LANGUAGE="javaScript">
<!--
function init(){
document.F1.action = "../servlets/CSVExportServlet";
document.F1.submit();
}
//-->
</SCRIPT>
<head>
<meta http-equiv="Content-Type" content="text/html; >
<title>CSVExport</title>
</head>
<body bgcolor="fffff" onload="init()" >
<FORM NAME=F1 method=post>
</form name="F1" method="post">
</body>
</html>
2-〉servlet部分代码(csv下载部分)
。。。
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "inline;filename=" +
strDataName);
BufferedReader in = new BufferedReader(new
StringReader(sbLogData.toString()));
DataOutputStream out = null;
try {
out = new DataOutputStream(response.getOutputStream());
String strLine;
while ((strLine = in.readLine()) != null) {
out.writeBytes(new String((strLine +
CommonBase.LINE_SEPARATOR).getBytes(), "ISO8859_1"));
}
response.resetBuffer();
//write data to the client
out.flush();
return;
} catch (IOException e) {
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
}
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
TraceLog.println(e.getMessage());
}
[备注]:希望通过本问题的解决与各位同行讨论以下两个问题:
1.IE的文件下载对话框的实现机制
2.servlet和javascipt如何通信。
谢了先!