Struts2 在500之前提交,java.lang.IllegalStateException:已提交

Struts2 在500之前提交,java.lang.IllegalStateException:已提交,struts2,apache-poi,Struts2,Apache Poi,我正在使用struts2导出excel文件。小一点的文件就可以了。我在一个较大的文件中遇到以下错误。为什么我会犯这个错误?文件的大小是否太大 2012-12-01 09:51:29.689::WARN: Committed before 500 Unable to show problem report: java.lang.IllegalStateException: STREAM 2012-12-01 09:51:29.690::WARN: /strutsDemo/process/exc

我正在使用struts2导出excel文件。小一点的文件就可以了。我在一个较大的文件中遇到以下错误。为什么我会犯这个错误?文件的大小是否太大

2012-12-01 09:51:29.689::WARN:  Committed before 500 Unable to show problem report: java.lang.IllegalStateException: STREAM
2012-12-01 09:51:29.690::WARN:  /strutsDemo/process/excel: 
java.lang.IllegalStateException: Committed
    at org.mortbay.jetty.Response.resetBuffer(Response.java:853)
    at org.mortbay.jetty.Response.reset(Response.java:832)
    at org.mortbay.jetty.Response.sendError(Response.java:220)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:801)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
    at org.mortbay.jetty.Server.handle(Server.java:269)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:687)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:492)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
    at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
2012-12-01 09:51:29.691::WARN:  /strutsDemo/file/export
java.lang.IllegalStateException: Committed
    at org.mortbay.jetty.Response.resetBuffer(Response.java:853)
    at org.mortbay.jetty.Response.reset(Response.java:832)
    at org.mortbay.jetty.Response.sendError(Response.java:220)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:801)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
    at org.mortbay.jetty.Server.handle(Server.java:269)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:687)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:492)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
    at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
以下是我的操作配置:

  <result name="success" type="stream">
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="inputName">excelStream</param>
    <param name="contentDisposition">attachment;fileName="${fileName}"</param>
    <param name="bufferSize">2048</param>
  </result>
  <result name="invalid.token">/error.jsp</result>
</action>

应用程序/vnd.ms-excel
excelStream
附件fileName=“${fileName}”
2048
/error.jsp

看起来您的代码开始编写Excel文件(返回到客户端),中途完成,并遇到了某种错误。到那时,返回并给出500 HTTP错误响应代码已经太晚了。您的问题中不包括错误的详细信息。(可能是客户端挂起、响应提交两次、应用程序代码引发异常等)如果调试应用程序并在引发任何异常时中断,您是否发现了什么


您还可以尝试使用更大的缓冲区大小来查看发生了什么。(4k、16k或更多?)这会告诉系统在开始将流渲染回客户端之前,保持流的时间更长。因此,您的实际问题可能会浮出水面。

没有足够的信息,请提供详细信息,说明您在做什么,如何尝试导出文件,否则很难说,乍一看,流似乎提前关闭。您是如何接收文件的?如果您没有使用注释,您可以向我们展示该操作的代码吗?您也可以向我们展示定义其配置的xml吗?我发现问题的一个原因是HttpServletResponse按照此答案提交了两次:它能想到的唯一情况可能是自定义结果类型。向我们展示您的操作配置。应用程序/vnd.ms-excel excelStream附件;fileName=“${fileName}”2048/error.jsp