java.lang.IllegalStateException,struts中实现下载报response重复错误
点击右边红色标题查看本文完整版:java.lang.IllegalStateException,struts中实现下载报response重复错误
java.lang.IllegalStateException,在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);
? }
------解决方法--------------------
你都
? out.close();了
? 还
? return mapping.findForward(SUCCESS);
?
? 不错才怪!
------解决方法--------------------
上面出错的原因可能是
?
? 1. 在 Forward 前使有了 close
? 2. 即使没有写 close,在某些情况下也会出错,如你下载的文件很大,造成 response buffer 已经 commit,这样也会出错,这点请参考 Servlet 规范的 buffer 的处理和 forward 的规范
? 3. 即使 buffer 没有 commit,使用 forward 会清空你上在所输出的内容,也得到你所要的结果
?
? 正确的写法我想应该是把 return mapping.findForward("success") 改成 return null;
?
? 上述解决方法我自己没有试过,不知道是不是可以,如果不行,建议直接使用 Servlet,那样简洁,也不容易也错