[求助]调用完IE提供的下载对话框完成CSV文件下载后如何关闭IE窗口?

9lives 2005-11-23 04:39:29
已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如何通信。
谢了先!
...全文
147 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qilincheng 2005-12-08
  • 打赏
  • 举报
回复
这个问题不好搞啊,服务器端不好获得客户端状态啊,还是用iframe实现吧,不要弹出新窗口了,只是状态栏会一直在加载状态,头疼啊.

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧