- PR -

Strutsでファイルダウンロード時にエラー

1
投稿者投稿内容
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2008-12-20 12:01
Strutsでファイル(CSV)をダウンロードさせた後に「java.lang.IllegalStateException」が発生し、原因が分からずに困っております。

【ソースコード】ファイル出力を行っているActionのメソッドです
public void fileOut(ActionMapping mapping,ActionForm form,HttpServletRequest
   request,HttpServletResponse response) throws Exception {
 SearchBO searchBO = new SearchBO(getDbSession(), request);
 String fileName = searchBO.serchData((InstructForm) form);
 ServletOutputStream outputStream = null;
 FileInputStream inputStream = null;
 try {
  BaseActionProperties properties = (BaseActionProperties)threadLocal.get();
  HttpServletResponse httpResponse = properties.getResponse();
  File file = new File(fileName);
  httpResponse.setContentType("application/octet-stream");
  httpResponse.setContentLength((int) file.length());
  httpResponse.setHeader("Content-Disposition", "attachment;
   filename=" + file.getName());
  outputStream = httpResponse.getOutputStream();
  inputStream = new FileInputStream(file);
  int size = 0;
  while ((size = inputStream.read()) != -1) {
   outputStream.write(size);
  }
  outputStream.flush();
 }catch (IOException ex) {
  throw new SystemFatalException(ex);
 }finally {
  if (outputStream != null) {
   outputStream.close();
  }
  if (inputStream != null) {
   inputStream.close();
  }
 }
 this.setForward("Show");
}

【エラー内容】
java.lang.IllegalStateException: [アドレスが入ります]Action.do: tried to write 2446 bytes with content-length 442 (Atchar=60).
atcom.caucho.server.connection.ResponseStream.lengthException(ResponseStream.java:548)
atcom.caucho.server.connection.ResponseStream.setBufferOffset(ResponseStream.java:359)
atcom.caucho.vfs.i18n.ISO8859_1Writer.write(ISO8859_1Writer.java:132)
atcom.caucho.server.connection.ToByteResponseStream.flushCharBuffer(ToByteResponseStream.java:469)
atcom.caucho.server.connection.ResponseStream.finish(ResponseStream.java:659)
atcom.caucho.server.connection.ResponseStream.close(ResponseStream.java:796)
atcom.caucho.server.connection.AbstractHttpResponse.finish(AbstractHttpResponse.java:1956)
atcom.caucho.server.connection.AbstractHttpResponse.close(AbstractHttpResponse.java:260)
atcom.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:190)
atcom.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
atcom.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
atcom.caucho.server.port.TcpConnection.run(TcpConnection.java:511)
atcom.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
atcom.caucho.util.ThreadPool.run(ThreadPool.java:442)
at java.lang.Thread.run(Unknown Source)

【環境】
OS:Windows Server 2003
JDK:1.5.0_16
Strus:1.3.8
APサーバ:intra mart(Resin)Ver.6.1
Webサーバ:Apach4.0

解決策、解決案、ヒントでも何でも構いませんので、ご教授下さいますよう宜しくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-12-20 14:27
HTTPレスポンスの出力ストリームは閉じる必要はないです。
あと何故フォワードしているのでしょうか?
ジン
ベテラン
会議室デビュー日: 2007/07/27
投稿数: 52
投稿日時: 2008-12-22 13:51
null でフォワードするといいですよ

あと補足でnocaheにしてるとうまく動きません。
1

スキルアップ/キャリアアップ(JOB@IT)