Java 在500流之前提交
我正在使用jetty-9.0.5.v20130815和Struts 2.3.15.1,当我尝试使用Chrome和Chrome下载文件时,会发生以下错误:Java 在500流之前提交,java,struts2,jetty,Java,Struts2,Jetty,我正在使用jetty-9.0.5.v20130815和Struts 2.3.15.1,当我尝试使用Chrome和Chrome下载文件时,会发生以下错误: ERROR 17/09/2013 10:26:11 (br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor):Unexpected error on action: class br.com.arquimagem.support.web.act
ERROR 17/09/2013 10:26:11
(br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor):Unexpected error on action: class br.com.arquimagem.support.web.action.CommonFilesAction
org.eclipse.jetty.io.EofException
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:186)
at org.eclipse.jetty.io.WriteFlusher.completeWrite(WriteFlusher.java:400)
at org.eclipse.jetty.io.SelectChannelEndPoint.onSelected(SelectChannelEndPoint.java:111)
at org.eclipse.jetty.io.SelectorManager$ManagedSelector.processKey(SelectorManager.java:498)
at org.eclipse.jetty.io.SelectorManager$ManagedSelector.select(SelectorManager.java:455)
at org.eclipse.jetty.io.SelectorManager$ManagedSelector.run(SelectorManager.java:420)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487)
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:165)
... 8 more
2013-09-17 10:26:11.441:WARN:oejs.Response:qtp776813247-5034: Committed before 500 STREAM
2013-09-17 10:26:11.456:WARN:oejs.ServletHandler:qtp776813247-5034: /GedocLog/CommonFile
java.lang.IllegalStateException: Committed
at org.eclipse.jetty.server.Response.resetBuffer(Response.java:999)
at org.eclipse.jetty.server.Response.sendError(Response.java:351)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:906)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:586)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:564)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1096)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:432)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1030)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:201)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:445)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:268)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:724)
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="customException"
class="br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor">
<param name="result">globalError</param>
</interceptor>
<interceptor name="customFileUpload"
class="br.com.arquimagem.support.web.struts2.interceptor.CustomFileUploadInterceptor">
<param name="result">globalError</param>
</interceptor>
<!-- Default Stack -->
<interceptor-stack name="defaultStack">
<interceptor-ref name="customException" />
<!-- <interceptor-ref name="customFileUpload" /-->
<!-- <interceptor-ref name="alias" /-->
<!-- <interceptor-ref name="prepare" /-->
<!-- <interceptor-ref name="i18n" /-->
<!-- <interceptor-ref name="chain" /-->
<interceptor-ref name="params" />
<!-- <interceptor-ref name="conversionError" /-->
<interceptor-ref name="validation" />
<!-- <interceptor-ref name="workflow"<param name="inputResultName">generalError</param
</interceptor-ref-->
</interceptor-stack>
<!-- Upload Stack -->
<interceptor-stack name="uploadStack">
<interceptor-ref name="customException" />
<interceptor-ref name="customFileUpload" />
<interceptor-ref name="params" />
<interceptor-ref name="validation" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack" />
<default-action-ref name="index" />
<global-results>
<result name="globalError">/pages/error/general.jsp
</result>
<result name="generalError">/pages/error/general.jsp
</result>
</global-results>
<action name="CommonFile"
class="br.com.arquimagem.support.web.action.CommonFilesAction">
<result name="sendFile" type="stream">
<param name="bufferSize">1024</param>
<param name="allowCaching">false</param>
</result>
<result>/pages/resultCommand.jsp</result>
</action>
</package> </struts>
My struts.xml:
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="customException"
class="br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor">
<param name="result">globalError</param>
</interceptor>
<interceptor name="customFileUpload"
class="br.com.arquimagem.support.web.struts2.interceptor.CustomFileUploadInterceptor">
<param name="result">globalError</param>
</interceptor>
<!-- Default Stack -->
<interceptor-stack name="defaultStack">
<interceptor-ref name="customException" />
<!-- <interceptor-ref name="customFileUpload" /-->
<!-- <interceptor-ref name="alias" /-->
<!-- <interceptor-ref name="prepare" /-->
<!-- <interceptor-ref name="i18n" /-->
<!-- <interceptor-ref name="chain" /-->
<interceptor-ref name="params" />
<!-- <interceptor-ref name="conversionError" /-->
<interceptor-ref name="validation" />
<!-- <interceptor-ref name="workflow"<param name="inputResultName">generalError</param
</interceptor-ref-->
</interceptor-stack>
<!-- Upload Stack -->
<interceptor-stack name="uploadStack">
<interceptor-ref name="customException" />
<interceptor-ref name="customFileUpload" />
<interceptor-ref name="params" />
<interceptor-ref name="validation" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack" />
<default-action-ref name="index" />
<global-results>
<result name="globalError">/pages/error/general.jsp
</result>
<result name="generalError">/pages/error/general.jsp
</result>
</global-results>
<action name="CommonFile"
class="br.com.arquimagem.support.web.action.CommonFilesAction">
<result name="sendFile" type="stream">
<param name="bufferSize">1024</param>
<param name="allowCaching">false</param>
</result>
<result>/pages/resultCommand.jsp</result>
</action>
</package> </struts>
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="customException"
class="br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor">
<param name="result">globalError</param>
</interceptor>
<interceptor name="customFileUpload"
class="br.com.arquimagem.support.web.struts2.interceptor.CustomFileUploadInterceptor">
<param name="result">globalError</param>
</interceptor>
<!-- Default Stack -->
<interceptor-stack name="defaultStack">
<interceptor-ref name="customException" />
<!-- <interceptor-ref name="customFileUpload" /-->
<!-- <interceptor-ref name="alias" /-->
<!-- <interceptor-ref name="prepare" /-->
<!-- <interceptor-ref name="i18n" /-->
<!-- <interceptor-ref name="chain" /-->
<interceptor-ref name="params" />
<!-- <interceptor-ref name="conversionError" /-->
<interceptor-ref name="validation" />
<!-- <interceptor-ref name="workflow"<param name="inputResultName">generalError</param
</interceptor-ref-->
</interceptor-stack>
<!-- Upload Stack -->
<interceptor-stack name="uploadStack">
<interceptor-ref name="customException" />
<interceptor-ref name="customFileUpload" />
<interceptor-ref name="params" />
<interceptor-ref name="validation" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack" />
<default-action-ref name="index" />
<global-results>
<result name="globalError">/pages/error/general.jsp
</result>
<result name="generalError">/pages/error/general.jsp
</result>
</global-results>
<action name="CommonFile"
class="br.com.arquimagem.support.web.action.CommonFilesAction">
<result name="sendFile" type="stream">
<param name="bufferSize">1024</param>
<param name="allowCaching">false</param>
</result>
<result>/pages/resultCommand.jsp</result>
</action>
</package> </struts>
我的CustomFileUploadInterceptor只是扩展FileUploadInterceptor。你需要发布更多的东西,比如customException Interceptor的代码。请注意,除非完全清楚正在做什么,否则从堆栈中删除这么多拦截器从来都不是一个好主意。我的拦截器,就发生在Chrome上,知道吗?
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="customException"
class="br.com.arquimagem.support.web.struts2.interceptor.ExceptionHandlerInterceptor">
<param name="result">globalError</param>
</interceptor>
<interceptor name="customFileUpload"
class="br.com.arquimagem.support.web.struts2.interceptor.CustomFileUploadInterceptor">
<param name="result">globalError</param>
</interceptor>
<!-- Default Stack -->
<interceptor-stack name="defaultStack">
<interceptor-ref name="customException" />
<!-- <interceptor-ref name="customFileUpload" /-->
<!-- <interceptor-ref name="alias" /-->
<!-- <interceptor-ref name="prepare" /-->
<!-- <interceptor-ref name="i18n" /-->
<!-- <interceptor-ref name="chain" /-->
<interceptor-ref name="params" />
<!-- <interceptor-ref name="conversionError" /-->
<interceptor-ref name="validation" />
<!-- <interceptor-ref name="workflow"<param name="inputResultName">generalError</param
</interceptor-ref-->
</interceptor-stack>
<!-- Upload Stack -->
<interceptor-stack name="uploadStack">
<interceptor-ref name="customException" />
<interceptor-ref name="customFileUpload" />
<interceptor-ref name="params" />
<interceptor-ref name="validation" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack" />
<default-action-ref name="index" />
<global-results>
<result name="globalError">/pages/error/general.jsp
</result>
<result name="generalError">/pages/error/general.jsp
</result>
</global-results>
<action name="CommonFile"
class="br.com.arquimagem.support.web.action.CommonFilesAction">
<result name="sendFile" type="stream">
<param name="bufferSize">1024</param>
<param name="allowCaching">false</param>
</result>
<result>/pages/resultCommand.jsp</result>
</action>
</package> </struts>