# StreamResultX
**Repository Path**: 41zone/StreamResultX
## Basic Information
- **Project Name**: StreamResultX
- **Description**: 解决Struts2下载取消异常的插件
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2014-10-08
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: utils
**Tags**: None
## README
# StreamResultX 1.2
## 兼容性
1. 兼容`struts2-sunspoter-stream-1.0.jar`版本
2. JDK最低版本1.6
## 使用建议
在1.2版本中,建议使用`cc.fozone.struts2.StreamResultX`方式,更为简单。
```Xml
```
## 使用场景
Struts2环境下,通过Struts2提供的下载方式进行下载时出现的`java.lang.IllegalStateException`异常
```Java
2011-1-820:34:20 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 javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)
at com.opensymphony.module.sitemesh.filter.PageResponseWrapper.sendError(PageResponseWrapper.java:176)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)
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 com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
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:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
```
## 解决方案
1. 将`StreamResultX-1.2.jar`,并复制在/WEB-INF/lib下
2. 在原有的`struts.xml`的基础上进行相应的配置,配置如下例
**配置如下**
```Xml
download
4096
filename=""
UTF-8
```
### 重点概述
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.0/1.1版本 到 1.2版本切换建议配置
将1.0/1.1中的class
```Xml
```
指向修改如下:
```Xml
```