-
-
轉自http://bear.conan.blog.163.com/blog/static/970124612013017113518929/
-
在使用Struts2下載文件時,如果點擊保存或打開,沒問題,點擊取消時控制檯則會拋出異常,但程序正常運行。
-
原因:
-
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的基礎上進行相應的配置,如下:
原有的result中type改爲“streamx”<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", 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,就可以解決了 -
-
Struts2下載文件點取消出現的異常解決
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.