Struts2环境下,通过Struts2提供的下载方式进行下载时出现的java.lang.IllegalStateException异常

  1. 2011-1-820:34:20 org.apache.catalina.core.StandardWrapperValve invoke
  2. 严重: Servlet.service() for servlet default threw exception
  3. java.lang.IllegalStateException
  4. at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
  5. at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)
  6. at com.opensymphony.module.sitemesh.filter.PageResponseWrapper.sendError(PageResponseWrapper.java:176)
  7. at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)
  8. at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
  9. at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
  10. at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
  11. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  12. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  13. at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
  14. at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
  15. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  16. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  17. at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
  18. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  19. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  20. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  21. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  22. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  23. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  24. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  25. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
  26. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
  27. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
  28. at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  29. at java.lang.Thread.run(Thread.java:662)

解决方案

  1. 将struts2-sunspoter-stream-1.0.jar,并复制在/WEB-INF/lib下
  2. 在原有的struts.xml的基础上进行相应的配置,配置如下例

配置如下

  1. <package name="default" namespace="/"extends="struts-default">
  2. <!-- 只需要添加这行配置 -->
  3. <result-types>
  4. <result-type name="streamx"class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/>
  5. </result-types>
  6. <action name="download"class="com.DownloadAction">
  7. <!-- 将原有的type="stream"类型修改为type="streamx"即可 -->
  8. <result name="success" type="streamx">
  9. <param name="inputName">download</param>
  10. <param name="bufferSize">4096</param>
  11. <param name="contentDisposition">filename=""</param>
  12. <param name="contentCharSet">UTF-8</param>
  13. </result>
  14. </action>

重点概述

  1. 在这种方式下,只需添加一个result-type;
  2. 将原有的result中type改为“streamx”,其他一律不变;
  3. 在这种情况下,点击“取消”的同时也关闭了流,不会再报出该异常。
  4. 之后的执行“取消”后的结果如下:(配置了"log4j.properties"才能看到该结果)

21:23:44,676 WARN StreamResult:45 - StreamResultX Warn : socket write error

如果出现该警告说明正确执行,该警告说明,Socket非正常中断,但是流确实已经关闭,自此再也不用看到上面出现的讨厌异常结果。

1.2版本建议配置

将上述 <result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/>指向修改如下: <result-type name="streamx" class="cc.fozone.struts2.StreamResultX"/>

附:StreamResultX GitHub地址:https://github.com/41zone/StreamResultX

Struts2 取消 下载时异常的更多相关文章

  1. Webbrowser 取消下载提示框

    在使用Webbrowser抓取网页信息时,碰到需要下载文件,这时需要用户介入操作,如何避免: 首先引进 [DllImport("urlmon.dll", CharSet = Cha ...

  2. Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  3. [No0000AE]在 Visual Studio 中调试 XAML 设计时异常

    在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况.很多时候由于最终生成的项目在运行时并 ...

  4. 在使用 CryptoAPITransform进行加密时异常要调用Reset()

    在使用 CryptoAPITransform进行加密时异常要调用Reset() 通过.net源码能看到Reset()里有 public void Reset() { _depadBuffer = nu ...

  5. nginx,文件下载,预览,防止浏览器下载时直接打开,防止预览时直接下载文件,解决nginx谷歌浏览器不支持下载问题

    公司项目逐渐增多,对效率的要求越来越高,不同项目分部不同服务器,最初想用nginx 就是为了多个项目用一个url和服务器宕机解决方案 nginx也可作为附件服务器,毕竟nginx也对静态文件支持较好, ...

  6. struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法

    struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法

  7. 解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象

    之前开发时遇到的一个问题,使用easyui的form提交表单,在Chrome下时没问题的,但是在IE下出现类似附件下载时提示是否保存的现象. 这里记录一下如何解决的.其实这个现象不光是easyui的f ...

  8. Java--RuntimeException(运行时异常)

    [转载自]:http://blog.csdn.net/qq7342272/article/details/7940741 java运行时异常是可能在java虚拟机正常工作时抛出的异常. java提供了 ...

  9. java异常分类(运行时异常,可检查异常)

    NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...

随机推荐

  1. 从JavaScript 数组去重看兼容性有关问题,及性能优化(摘自玉伯博客)

    JavaScript 数组去重经常出现在前端招聘的笔试题里,比如: 有数组 var arr = ['a', 'b', 'c', '1', 0, 'c', 1, '', 1, 0],请用 JavaScr ...

  2. MS SQL表字段自增相关的脚本

    --查询表是否有自增字段 SELECT OBJECTPROPERTY(OBJECT_ID('[表名]'), 'TableHasIdentity') --查询表的自增字段 SELECT COLUMN_N ...

  3. xdebug安装教程

    自动分析应该下载的文件: http://xdebug.org/wizard.php

  4. Go语言核心之美 4.3-多返回值

    在Go语言中.函数能够有多个返回值,这个特性我们已经在之前的样例见过非常多,非常多标准库函数都会返回两个值,一个是期望得到的函数执行结果,另外一个是函数出错时的错误值. 以下的程序是findlinks ...

  5. 关于Unity层级面板的自动初始化

    Transform[],GameObject[]这些class类型,Unity会进行自动初始化. 但[ExecuteInEditMode]在编辑模式下执行的时候,会发现初始化其实也是有顺序的,并且在U ...

  6. 32位嵌入式微处理器(processor)一览

    32位嵌入式微处理器(processor)一览 由于嵌入式系统的专用型与定制性,与全球PC市场不同,没有一种微处理器或者微处理器公司可以主导嵌入式系统.本文分析了当前市场上主流的一些32位嵌入式微处理 ...

  7. Debian8.0 搭建leanote

    参考了官方wiki以及中文博客 https://github.com/leanote/leanote/wiki http://leanote.leanote.com/post/Leanote-manu ...

  8. Linux 命令之权限修改

    chmod 改变一个文件的权限:chmod [mode] file.txt改变一个目录的权限:chmod [mode] dir改变一个目录和其子目录的权限:    chmod [mode] dir - ...

  9. ptxdist for sama5d3

    http://www.vahanus.net/~csc/scm/ptxdist-at91sama5d3-xpld.git/

  10. cacati的安装

    一.安装rrdtool软件包 yum install -y cairo-devel libxml2-devel pango-devel pango libpng-devel freetype free ...