struts2点击下载,如果正常下载不会报错,可是如果点击取消就会报如下的错误:

Java.lang.IllegalStateException: Cannot call sendError() after the response has been committed......

    1. 原因:

    2. stream对应的类是org.apache.struts2.dispatcher.StreamResult,该类的处理过程如下:
          1、配置其中result标签下的各个参数
          2、从服务器中获取输入流,并同时与客户端建立输出流(服务器与客户端链接通过Socket进行连接)
          3、当点击“保存”或“打开”时,开始传输数据。如果点击“取消”,关闭所有的流

 但是实际发现Socket并没有断开,并且流也没有关闭,所以在JSP容器通过Response获取输出流之前,前面的流并没有关闭,所以会造成该异常的报出

解决方法:

1、下载struts2-sunspoter-stream-1.0.jar,复制到WEB-INF/lib下

2、在原有的struts.xml的基础上进行相应的配置,如下:

<package name="main" extends="struts-default" namespace="/">
<result-types>
<result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"></result-type>
</result-types>
<action name="down" class="com.ruida.web.action.PatentsAction" method="down">
<!-- 指定当前action 返回的类型为 (流) -->
<result name="success" type="streamx">
<!-- 指定当前文件的打开方式 attachment(以附件的形式打开文件) ,filename 指定文件的名字 ,${fileName}
对应 action中文件名的属性(用于在下载框中) -->
<param name="contentDisposition">attachment;fileName="${fileName}"</param>
</result>
<result name="fail" type="redirect">/index.jsp</result>
</action>
</package>

红色部分为添加的部分,并在原有的result中type改为“streamx”

如果是使用注解方式同样如下:

@Result(type="streamx", params={"inputName","inputStream","bufferSize","4096", "contentDisposition", "attachment;filename=\"${downloadFileName}\""})

修改之后执行取消,效果如下:

[WARN] StreamResultX Warn : socket write error

Struts2下载文件点取消出现的异常解决的更多相关文章

  1. [JavaWeb基础] 010.Struts2 下载文件

    在web开发中,我们经常会有文件的上传下载功能,上一篇的介绍中我们讲解了上传功能,那么这次我们来讲讲下载功能. 1.首先我们需要有一个用于处理下载的测试页面,也就是jsp. <body> ...

  2. java下载文件时文件名出现乱码的解决办法

    转: java下载文件时文件名出现乱码的解决办法 2018年01月12日 15:43:32 橙子橙 阅读数:6249   java下载文件时文件名出现乱码的解决办法: String userAgent ...

  3. 【转】【Python】python使用urlopen/urlretrieve下载文件时出现403 forbidden的解决方法

    第一:urlopen出现403 #!/usr/bin/env python # -*- coding: utf- -*- import urllib url = "http://www.go ...

  4. struts2 下载文件

    作者:禅楼望月 当下载的文件名字中不含有汉字,或者下载的文件不需要考虑用户的权限问题时.直接让超链接的href属性为所要下载的文件名即可.否则最好使用struts2的文件下载机制. 以下载图片为例 完 ...

  5. .NET下载文件报错System.UnauthorizedAccessException的解决方法

    假设VS代码对应路径为E:\Projects\Web1,在VS用“发布Web”的方式发布后的路径为E:\Site\Web1.在IIS新建2个站点,站点A指向E:\Projects\Web1,站点B指向 ...

  6. spring MVC 下载文件(转)

    springle MVC中如何下载文件呢? 比struts2 下载文件简单得多 先看例子: @ResponseBody @RequestMapping(value = "/download& ...

  7. linux 从百度网盘下载文件的方法

    linux 从百度网盘下载文件的方法 发表于2015 年 月 日由shenwang 方法1.wget wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括 ...

  8. Struts2控制文件的上传与下载

    Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制 ...

  9. 【Struts2】文件上传与下载

    一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...

随机推荐

  1. jquery:closest和parents的主要区别

    closest和parents的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找:2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进 ...

  2. 【Unity3d游戏开发】unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(转载)

    此文为转载,因为最近在做U3D,有一些概念弄得不是很清楚,看到这篇博客讲的不错,就转载过来了,方便自己随时查看. ------------------------------------------- ...

  3. js学习

    2014-02-21 var p=function(){}(); //表示定义一个变量P,变量后面的函数为返回值 var p = function(){return 'abc';}(); alert( ...

  4. C#_实用

    1.获取当前浏览器信息HttpContext.Current.Request.Browser string browser = HttpContext.Current.Request.Browser. ...

  5. ArcEngine 岛状多边形内部环的获取

    ArcEngine岛状多边形获取其内部环 查阅了帮助文档相关接口,内部环的获方法get_InteriorRingBag() 需要外部环作为参数.而外部环可以直接通过ExteriorRingBag属性获 ...

  6. java并发编程(二)线程中断

    参考:http://blog.csdn.net/ns_code/article/details/17091267 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thre ...

  7. source insight使用

    左键选中后 ctrl+ 跳转到定义 alt+,返回到调用者的程序

  8. subString(), subStr(),splice(),split()的区别

    1.slice(): Array和String对象都有 在Array中  slice(i,[j]) i为开始截取的索引值,负数代表从末尾算起的索引值,-1为倒数第一个元素 j为结束的索引值,缺省时则获 ...

  9. .net资源链接

    http://aspalliance.com/ http://www.hotscripts.com/ http://www.dotnet247.com http://stackoverflow.com ...

  10. linux下解压

    (1).*.tar 用 tar –xvf 解压  (2).*.gz 用 gzip -d或者gunzip 解压  (3).*.tar.gz和*.tgz 用 tar –xzf 解压  (4).*.bz2 ...