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. 【改】iOS学习之NSAttributedString(富文本)

    NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...

  2. std::string的split函数

    刚刚要找个按空格分离std::string的函数, 结果发现了stackoverflow上的这个问题. 也没仔细看, 直接拿来一试, 靠, 不对啊, 怎么分离后多出个空字符串, 也就是 "a ...

  3. scrapy爬虫笔记(三)------写入源文件的爬取

    开始爬取网页:(2)写入源文件的爬取 为了使代码易于修改,更清晰高效的爬取网页,我们将代码写入源文件进行爬取. 主要分为以下几个步骤: 一.使用scrapy创建爬虫框架: 二.修改并编写源代码,确定我 ...

  4. linux 源码安装详解

    ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本.make是用来编译的,它从Makefile中读取指令,然后编 ...

  5. mycat的读写分离设置

    官网:http://www.mycat.org.cn/ 一.jdk环境的安装1.安装jdk1.7,这是mycat推荐的jdk环境 2.之前是用yum安装的jdk1.6,首先查找下 #yum info ...

  6. Thinking in Java——笔记(11)

    Holding Your Objects In general, your programs will always be creating new objects based on some cri ...

  7. VC++获取IDC_EDIT的7种方法

    VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, num ...

  8. selenium定位页面元素的一件趣事

    PS:本博客selenium分类不会记载selenium打开浏览器,定位元素,操作页面元素,切换到iframe,处理alter.confirm和prompt对话框这些在网上随处可见的信息:本博客此分类 ...

  9. rem的使用

    浏览器的默认字体高是16px. 兼容性: 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem. 对于不支持的浏览器,要多写一个绝对单位的声明,这样浏览器就 ...

  10. 上传图片插件鼠标手cursor:pointer;不生效

    问题: 只在谷歌里失效; 解决: font-size:0; 参考: http://jingyan.baidu.com/article/48b558e32fabb67f38c09a81.html htt ...