当前位置:编程学习 > JAVA >>

在servlet中输出文件后,如何再跳转到新页面?

我在servlet中用如下设置输出word文档后,我发现response.sendRedirect("http://www.126.com");无效了。有什么解决办法么?我希望在导出Word文档后跳转到一个新页面中

File file = new File(expfilepath);
FileInputStream is = new FileInputStream(file);
BufferedInputStream bis = null;

BufferedOutputStream bos = null;

// 保存本地文件名
int fileSize = (int) file.length();
String filename = URLEncoder.encode(expfilename, "UTF-8"); //中文文件名(乱码)转换   
// 设置下载文件使用的报头域
response.reset();
response.setContentType("application/msword");
response.setHeader("Content-Disposition", "attachment; filename="+ filename);
response.setContentLength(fileSize);
// 得到响应对象的输出流,用于向客户端输出二进制数据
ServletOutputStream sos = response.getOutputStream();
bis = new BufferedInputStream(is);

bos = new BufferedOutputStream(response.getOutputStream());

byte[] buff = new byte[2048];

int bytesRead;

while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {

bos.write(buff, 0, bytesRead);
}

bos.flush();
bos.close();
bis.close();

//这里执行了但是没有效果
response.sendRedirect("http://www.126.com"); --------------------编程问答-------------------- 在下载页面中使用window.location.href = "http://www.126.com"; --------------------编程问答-------------------- 不要reset response试下 --------------------编程问答-------------------- 简单的逻辑客户端发出一个请求,服务端给回一个响应。返回文件的数据流就是一个响应。而这个响应不是针对画面的,所以对正常画面的请求响应下载文件的话。一般会发生一个异常,有些许问题。一般都是在画面中新建一个servlet。这个servlet就是管下载文件的。画面点击下载请求时,设定个易做图值。再次刷新画面时引用这个servlet。平时不引用就可以了。

你的要求导出文档后迁移到新画面,我有两种理解。一种是后台数据流都已经发送完了,就迁移到新画面。另一种是客户端下载完了。迁移新画面。第一种状况最好是使用单独的servlet去下载文件。我的想法是,数据流发送完成后,更新数据库某些数据,说明已经完成某个任务。主画面定时自动检测这类数据。检测到完成了迁移到新画面。第二种状况只能是客户端画面处理,在画面的焦点移入事件中,根据某个易做图值做是否迁移到新画面处理,这个易做图值只在点击下载按钮之后负值。当然,这里面会有些问题,如果确认数据流正常传输。是否要判断用户是点下载了,还是取消了。先确认好逻辑,然后再去讨论技术实现。 --------------------编程问答-------------------- 经过我测试,是因为有了response.getOutputStream()这句以后,下面的response.sendRedirect("http://www.126.com")就失效了。
可是response.getOutputStream()是向客户端输出word文档的必须语句,这样该如何进行页面跳转?(跳转页面的目的是刷新调用servlet的页面,以上代码是在一个servlet中执行的)
或者能给我一个向客户端输出word文档后刷新调用页面的方式。谢谢 --------------------编程问答--------------------
引用 3 楼 dntg007 的回复:
简单的逻辑客户端发出一个请求,服务端给回一个响应。返回文件的数据流就是一个响应。而这个响应不是针对画面的,所以对正常画面的请求响应下载文件的话。一般会发生一个异常,有些许问题。一般都是在画面中新建一个servlet。这个servlet就是管下载文件的。画面点击下载请求时,设定个易做图值。再次刷新画面时引用这个servlet。平时不引用就可以了。

你的要求导出文档后迁移到新画面,我有两种理解……

哥们我觉得你使用服务端的跳转就能解决你的问题,至于你那为啥会错误,我觉得吧,你没搞清楚request的生命周期,别生气只适合个人的看法,多去想想就ok了 --------------------编程问答-------------------- 直接向页面out就行了~~~

然后会提示你的。。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,