Struts2下載文件點取消出現的異常解決

    1. 轉自http://bear.conan.blog.163.com/blog/static/970124612013017113518929/

    2. 在使用Struts2下載文件時,如果點擊保存或打開,沒問題,點擊取消時控制檯則會拋出異常,但程序正常運行。

    3. 原因:

    4.     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="e3itm" extends="struts-default">
        <result-types>
         <!-- 用於處理下載文件點擊取消時報出異常問題 -->
         <result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/> 
        </result-types>
         <action name="download" class="com.DownloadAction">               
          <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>  
       
      </package></span>
      原有的result中type改爲“streamx”

       

      如果是使用註解方式同樣如下:

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

       

      修改之後執行取消,效果如下:

      [WARN] StreamResultX Warn : socket write error


    struts2-sunspoter-stream-1.1.jar 下載直接使用會報錯
    因爲struts2-sunspoter-stream-1.1.jar 只是JDK1。4編譯的,在1。6以上情況下報錯
    解決方法是反編譯其原代碼,只有1個類,然後重新導出1。6JAR,就可以解決了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章