【Servlet+Struts2】檔案下載時拋出java.lang.IllegalStateException異常的解決方案

來源:互聯網
上載者:User

標籤:servlet   異常   struts2   tomcat   jsp   

java.lang.IllegalStateException這種異常,不代表檔案不能下載,不代表程式寫錯,它在Tomcat拋出完異常之後依然能夠正常啟動並執行。只是看著不爽而已,每次下載都要在Tomcat拋出一大堆異常。

java.lang.IllegalStateException主要是用了後台把檔案丟進respond的緩衝區,然後respond再把下載的檔案扔回JSP的情況所造成的。Servlet與Struts2反正是JSP都有可能存在。其主要原因JSP在對緩衝區讀,後台JAVA在對緩衝寫所導致。

如果Struts2按照《【Struts2】中文檔案的下載與下載許可權的控制》(點擊開啟連結)以輸入輸出資料流的方式把檔案拋向前台給使用者下載絕對不會這種問題。

一般不應該用respond去傳遞檔案,畢竟有一個互斥問題,但也不是不可以解決。

對於JSP+Servlet開發的頁面,只需要在JSP頁面加上:

<%out.clear(); out=pageContext.pushBody();%>

然後在背景JAVA檔案檢查:

①在response.sendRedirect()方法後加return語句即可,如下:

response.sendRedirect("login.jsp");return;
②檢查提交的url是否有誤。
③如果你的頁面中用了清緩衝代碼response.flushbuffer();又用到了response.sendRedirect(url);,你可以把response.flushbuffer();去掉,或者用JS的window.location.href="url";來做轉向。

如果是Struts2應該把return success;改成return null;對應的struts.xml中的Action的result的name屬性去到,反正下載除了斷網就從來沒有見過失敗了。就可以正常下載的。

【Servlet+Struts2】檔案下載時拋出java.lang.IllegalStateException異常的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.