我有一个报表,如果选择的内容多,那么执行程序时间比较长,导出的文件大小其实没有太大变化,就不能出现下载窗口了!但是文件能够正常生成,只是没有出现下载的页面。好像和request、response超时有关,导致没有返回页面。谁给点提示啊!
这是我的代码:try {
InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (Exception e) {
e.printStackTrace();
}如果选择的内容少,debug在红色行时候,就会弹出下载提示窗口。
内容多时候,页面就没有反应了,但是从后台打印可以发现,文件确实已经生成,程序也都执行了。延长时间都试过了,下面是代码,也没有作用,不知道是怎么回事!HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(3000000); client.getHttpConnectionManager().getParams().setSoTimeout(3000000);
HttpParams params = new DefaultHttpParams();
httpConnectionParams.setConnectionTimeout(1111111);
httpConnectionParams.setSoTimeout(11111111);
params.setParameter("http.socket.timeout", 1000000);
params.setParameter("http.connection.timeout", 1000000);问题解决了,分全部赠送报表requestresponsejavasevelet
这是我的代码:try {
InputStream fis = new BufferedInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (Exception e) {
e.printStackTrace();
}如果选择的内容少,debug在红色行时候,就会弹出下载提示窗口。
内容多时候,页面就没有反应了,但是从后台打印可以发现,文件确实已经生成,程序也都执行了。延长时间都试过了,下面是代码,也没有作用,不知道是怎么回事!HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(3000000); client.getHttpConnectionManager().getParams().setSoTimeout(3000000);
HttpParams params = new DefaultHttpParams();
httpConnectionParams.setConnectionTimeout(1111111);
httpConnectionParams.setSoTimeout(11111111);
params.setParameter("http.socket.timeout", 1000000);
params.setParameter("http.connection.timeout", 1000000);问题解决了,分全部赠送报表requestresponsejavasevelet
解决方案 »
- 润乾报表批量打印
- java用poi如何导出有多个工作薄的exel?
- tomcat可以作为生产服务器吗?
- 请教:struts-》webwork 刚学webwork,问两个基础的问题:)
- 求图表(Chart)一个项目的合作!急,在线
- java&&vrml的问题,十万火急急a!!!!
- 应用服务器+J2EE 和 Tomcat+Servlet 的优势和劣势是什么
- Struts环境配置手顺(eclipse版),包括SQL Server的连接!
- jbuilder下datasource的配置问题
- 一个神奇的错误
- 哪些jquery文件上传插件比较好用??谢了
- 关于javascript处理隐式表单中保存的集合问题
//得到下载文件的名字
//String filename=request.getParameter("filename");
//解决中文乱码问题
// String filename=new String(request.getParameter("filename").getBytes("iso-8859-1"),"gbk"); //创建file对象
File file=new File(fileName); //设置response的编码方式
response.setContentType("application/octet-stream"); //写明要下载的文件的大小
response.setContentLength((int)file.length()); //设置附加文件名
// response.setHeader("Content-Disposition","attachment;filename="+filename);
//解决中文乱码
response.setHeader("Content-Disposition","attachment;filename=tt.doc"); //读出文件到i/o流
FileInputStream fis=new FileInputStream(file);
BufferedInputStream buff=new BufferedInputStream(fis); byte [] b=new byte[1024];//相当于我们的缓存 long k=0;//该值用于计算当前实际下载了多少字节 //从response对象中得到输出流,准备下载 OutputStream myout=response.getOutputStream(); //开始循环下载 while(k<file.length()){ int j=buff.read(b,0,1024);
k+=j; //将b中的数据写到客户端的内存
myout.write(b,0,j); } //将写入到客户端的内存的数据,刷新到磁盘
myout.flush();
myout.close();
修改之后还是没有作用啊