llegalStateException 错误

雪里风火 2004-09-13 01:54:04
在struts中实现下载抱response重复错误. 在execute中的代码如下:

byte[] fileBuf = getbyte();//得到输出的数据
long len = fileBuf.length;
int k = 0;

byte[] buf = new byte[65535];
response.setContentType("aplication/txt; charset=MS932");
response.setContentLength((int) len);
response.setHeader(
"Content-Disposition",
"attachment;" + " filename=" + fileName);

OutputStream out = response.getOutputStream();
try {
while ((long) k < len) {
int j = 0;
for (int i = 0; i < Constants.MAX_BUF_SIZE; i++) {
if ((long) k < len) {
buf[i] = fileBuf[k];
} else {
break;
}
k++;
j++;
}
out.write(buf, 0, j);
}
} finally {
out.close();
}

return mapping.findForward(SUCCESS);
}
...全文
370 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪里风火 2004-11-03
  • 打赏
  • 举报
回复
已经输出到下载页面,再使用return mapping.findForward(SUCCESS);报错.
解决办法是return null;
ESoftWind 2004-09-28
  • 打赏
  • 举报
回复
上面出错的原因可能是

1. 在 Forward 前使有了 close,如楼上所说
2. 即使没有写 close,在某些情况下也会出错,如你下载的文件很大,造成 response buffer 已经 commit,这样也会出错,这点请参考 Servlet 规范的 buffer 的处理和 forward 的规范
3. 即使 buffer 没有 commit,使用 forward 会清空你上在所输出的内容,也得到你所要的结果

正确的写法我想应该是把 return mapping.findForward("success") 改成 return null;

上述解决方法我自己没有试过,不知道是不是可以,如果不行,建议直接使用 Servlet,那样简洁,也不容易也错
0xCafeBabe 2004-09-24
  • 打赏
  • 举报
回复
晕,你都
out.close();了

return mapping.findForward(SUCCESS);

不错才怪!
nwpulipeng 2004-09-24
  • 打赏
  • 举报
回复
调试一下看看
huafong 2004-09-24
  • 打赏
  • 举报
回复
response.reset(); //这行很重要!!!!!!!!
huafong 2004-09-24
  • 打赏
  • 举报
回复
action 中只转发
另一个页面写下载代码试试


gong1 2004-09-13
  • 打赏
  • 举报
回复
debug
能行吗?
好象是jsp
吧?
你把65535改小.
fireflyqt 2004-09-13
  • 打赏
  • 举报
回复
这段程序没看出什么错误啊
帮你up一下吧
老土豆T 2004-09-13
  • 打赏
  • 举报
回复
能debug跟踪一下看看嘛,
雪里风火 2004-09-13
  • 打赏
  • 举报
回复
其中: Constants.MAX_BUF_SIZE = 65535

67,515

社区成员

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

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