当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

StreamResultX

struts2下载取消异常
授权协议 MIT
开发语言 Java
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 国产
投 递 者 柴正祥
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

StreamResultX 1.2

兼容性

  1. 兼容struts2-sunspoter-stream-1.0.jar版本
  2. JDK最低版本1.6

Maven

<dependency>
    <groupId>cc.fozone.struts2</groupId>
    <artifactId>StreamResultX</artifactId>
    <version>1.2</version>
</dependency>

使用建议

在1.2版本中,建议使用cc.fozone.struts2.StreamResultX方式,更为简单。

<result-types>  
    <result-type name="streamx" class="cc.fozone.struts2.StreamResultX"/>  
</result-types>

使用场景

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

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的基础上进行相应的配置,配置如下例

配置如下

<package name="default" namespace="/"extends="struts-default">  
<!-- 只需要添加这行配置 -->  
<result-types>  
    <result-type name="streamx" class="cc.fozone.struts2.StreamResultX"/>  
</result-types>  

<action name="download"class="com.DownloadAction">  
    <!-- 将原有的type="stream"类型修改为type="streamx"即可 -->               
    <result name="success" type="streamx">  
        <param name="inputName">download</param>  
        <param name="bufferSize">4096</param>  
        <param name="contentDisposition">filename=""</param>  
        <param name="contentCharSet">UTF-8</param>  
    </result>  
</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.0/1.1版本 到 1.2版本切换建议配置

将1.0/1.1中的class

<result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/>

指向修改如下:

<result-type name="streamx" class="cc.fozone.struts2.StreamResultX"/>
  • 这个类解决下载时点击取消时出现的异常 http://www.cnblogs.com/icerainsoft/p/3524344.html 解决方案 将struts2-sunspoter-stream-1.0.jar,并复制在/WEB-INF/lib下 在原有的struts.xml的基础上进行相应的配置,配置如下例 配置如下 <package name="default" namespace="/"

 相关资料
  • 当我试图从struts的action类(即RMI客户端)访问RMI serevr时(点击jsp按钮),我得到了这个执行选项 下面是我的RMI客户端代码片段 当我使用public static void main()在单独的文件中尝试上面的代码时,这很好,但当我在struts框架的Action类中尝试相同的代码时,出现了上述异常。

  • 我决定在我的项目中使用可下载字体。我实现了指南中建议的所有内容。 下一步,当我尝试从ResourcesCompat获取字体时,出现了以下问题: 在那之后,我总是得到这样的体验: 如何解决这个问题? PS: support-compat库v27 min sdk 16 通过ResourcesCompat解决方案。FontCallback在我的情况下不是一个好方法 问题发生在有和没有Google Pla

  • 这个问题与Selenium webdriver在chrome://downloads 我正在尝试将Selenium与Python(3)一起使用,以访问 chrome://downloads 页面上的取消按钮。我的用例是我有一个混淆链接,每次用户单击它时都会生成一个随机令牌。如果你不点击它,你就无法开始下载(它似乎触发了一段生成令牌的 js,但我还没有成功地挖掘代码来弄清楚这是如何发生的)。 为了让

  • 我正在尝试从服务器下载PPT文件。它以字节为单位。 但在调试时,我注意到输入流在运行时抛出FileNotFound异常。该文件确实存在于服务器上,这是我的代码,如果有任何帮助,我们将不胜感激。 我在Mac上使用Charles(类似于windows上的fiddler)来查看我从服务器发送和接收的内容。服务器不会返回任何错误,尽管它显示下载步骤6-7秒,下载大约400字节,然后停止。 从输入流行引发异

  • 我正在尝试用mysql和flyway运行我的Spring项目引导 我的环境: > Linux 18.04 Java 1.8.0_201 application.yml v1__init.sql user.java

  • 问题内容: 我正在编写一个Java应用程序(将NetBeans用作IDE和jFrame表单),并且其中一部分下载了文件。如何使用下载的当前进度更新进度条,或者至少获取另一个线程中当前下载的字节总数? 以下是我的代码的一部分: 问题答案: 一个工作示例,使用您的代码并在进度栏中显示进度,如下所示: 这显示了如何做-在使用它之前,您应该考虑GUI-Threads等。

  • 我正在编写一个Java应用程序(使用NetBeans作为IDE和jFrame表单),其中一部分下载一个文件。我如何用下载的当前进度更新进度条,或者至少获得另一个线程中当前下载的字节总量? 下面是我的一部分代码: