[color=red] Stirng fileName = request.getParameter("fileName");//Redirect();[/color]
[color=red]//String fileName = request.getAttribute("fileName").toString();//forward()[/color]
try{
File file = new File(filePath);
FileInputStream bis = new FileInputStream(file);
response.reset();
response.setContentType("APPLICATION/OCTET-STREAM; charset=utf-8");
response.setHeader("Content-disposition", "attachment; filename= " + fileName);
/*response.setHeader("Content-disposition","filename=" + fileName);*/
response.setContentLength((int) file.length());
OutputStream bos = response.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
readCount = bis.read(buff);
while (readCount != -1)
{
bos.write(buff, 0, readCount);
readCount = bis.read(buff);
}
bos.flush();
if(bis != null)
{
bis.close();
}
if(bos != null)
{
bos.close();
}
}
catch (Throwable e)
{
//e.printStackTrace();
}finally{
out.clear();
out = pageContext.pushBody();
}
如果 是重定向到下载页面 不会出异常 但是如果forward(),
依然报getOutputStream() has already been called for this response
getOutputStream()和getWriter()这两个方法不能在一个请求内同时使用,如果使用forward,这时将要跳转到的页面是要用getWriter方法获得输出流把页面内容发送到浏览器,但之前以经使用了getOutputStream,而且是同一请求,所以出错了,使用redirect因为是两个不同的请求,所以不会出错。下载时你可以打开新页面来下载,这样下载完了之前页面也还在。