首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Exception >

java.lang.IllegalStateException,struts中实现下载报response重复错误

2014-01-26 
java.lang.IllegalStateException,在struts中实现下载报response重复错误. 在execute中的代码如下:byte[] f

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,那样简洁,也不容易也错

        

热点排行