描述:点击保存没有问题,当点击取消时报异常错误,请各位高手们指教啊,先谢谢啦!!!//action
public InputStream getTargetFile() throws Exception{
 ServletActionContext.getResponse().setHeader("Content-Disposition","filename="+new String(inputPath.getBytes("gb2312"),"iso-8859-1"));
      return ServletActionContext.getServletContext().getResourceAsStream("\\upload\\"+inputPath);
     
}//下载的struts配制文件
 <!-- 下载 -->
  <action name="down" class="action.DownLoadAction">
     <param name="contentType">charset="gb2312"</param>
     <param name="inputPath">中国风.rar</param>
     <result name="success" type="stream">
      <!-- 指定由getTargetFile()方法返回被下载的inputStream -->
      <param name="inputName">targetFile</param>
        <param name="contentDisposition">filename=""</param>
        <param name="buffersize">4096</param>
     </result>
  </action>//点击取消时报的异常
2009-12-27 10:25:38 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

解决方案 »

  1.   

    点取消的不触发action不就行啦?
      

  2.   

    public class IllegalStateException
    extends RuntimeException
    在非法或不适当的时间调用方法时产生的信号。换句话说,
    即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 
    不调用方法还报错吗
      

  3.   

    把这个异常catch一下不让它出来嘛。反正保存已经好了
      

  4.   


    我已经catch过了,但还是报异常啊
      

  5.   

    这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突.
    即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。
    解决方案:
    1.在程序中添加:
    out.clear();
    out = pageContext.pushBody();
    就可以了;2,不要在%〕〔%之间写内容包括空格和换行符
    3,在页面写入图片的时候,需要flush()
     OutputStream output=response.getOutputStream();
     output.flush();
    4,在页面确定写入<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312”> 
      

  6.   

    把这个异常catch到,存入日志就行了,这个无法避免
      

  7.   

    根源在tomcat会抛出ClientAbortException我提供一个解决办法如下,根据实际情况你可以再修改。=1========
    <action name="down" class="action.DownLoadAction"> 
      <param name="contentType">charset="gb2312" </param> 
      <param name="inputPath">中国风.rar </param> 
      <result name="success" type="stream"> 
      <exception-mapping result="client-abort-exception" exception="org.apache.catalina.connector.ClientAbortException"></exception-mapping>
      <param name="inputName">targetFile </param> 
        <param name="contentDisposition">filename="" </param> 
        <param name="buffersize">4096 </param> 
      </result> 
    </action> =2==================
    <package name="default" extends="struts-default" abstract="true">
      <global-results>
        <result name="client-abort-exception">/ignore.jsp</result>
      </global-results>
    </package>=3=================
    新建一个空的文件,命名为ignore.jsp
    如果你的容器不是tomcat,而是resin。那么resin有一个参数ignore-client-disconnect,直接设置一下即可,不需要做上述操作。祝你好运
      

  8.   

    网上也有很多这方面的讨论,你多sousou也能找到why,还有就是调试。我发现
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770) 
    这个代码中catch的error就是 ClientAbortExceptionstruts2正好有exception-mapping的功能。那么在下载action中把这个ClientAbortException截获,扔到一个空的result里就行了。已经我在struts1里也碰到过,当时没仔细去找问题,今天看到提问,顺便就花时间看了下,赚点分,呵呵
      

  9.   

    昨天刚试的时候没事后来一重起tomcat又出了新的异常能否再帮忙解决下?
    //新的异常错误
    2009-12-29 10:13:10 org.apache.catalina.core.ApplicationDispatcher invoke
    严重: Servlet.service() for servlet jsp threw exception
    java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:604)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
    at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:178)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
    at org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:94)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
    at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:156)
    at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
    2009-12-29 10:13:10 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet default threw exception
    java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
      

  10.   

    这跟下载有关系吗??at org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:94) 你在MyJsp中干了啥? 打开了2次response.getOutputStream()。先结贴吧,有问题再说
      

  11.   

    JAVA爱好者讨论群,欢迎大家的加入:100756746
      

  12.   


    什么也没做啊,加上你给的内容运行就出现这个异常了MyJsp.jsp是新页面,里面什么也没
      

  13.   

    <result name="success" type="stream">
      <exception-mapping result="client-abort-exception" exception="org.apache.catalina.connector.ClientAbortException"> </exception-mapping>
      <param name="inputName">targetFile </param>
        <param name="contentDisposition">filename="" </param>
        <param name="buffersize">4096 </param>
      </result>这个<result>标签内部提示只能用<param>啊,<exception-mapping/>会报错,怎么回事??
      

  14.   

    请看:http://zzb20081225.blog.163.com/blog/static/139636994201131922239974/
    绝对有用,比上面的方法好多了,且很强大
    只需要导入一个jar包,并修改一下type型和加一句result-type