java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本人聲明。否則將追究法律責任。
作者:永恆の_☆    地址:http://blog.csdn.net/chenghui0317/article/details/9531171

做開發的時候,有時候報錯:

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

字面上是參數異常, 在response已經提交之後 不能發送錯誤請求。

下面看個例子就一目瞭然了:

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.print("上傳成功!上傳文件爲:"+fileName+"<br/>保存的地址爲"+filePath+ "!!");
    out.close();
    
    response.sendRedirect("index.jsp");

首先,利用reponse.getWrite()獲得輸出流對象,close()之後,這裏reponse其實已經提交了。註釋下面的sendRedirect代碼,執行之後發現response已經進行已經跳轉了,只不過url沒有發生改變,並且頁面上已經有輸出上面指定的字符串。

所以當執行上面代碼之後 ,reponse 會提交兩次,服務器就不知道該怎麼辦了,所以拋出異常。


解決方案: 去掉out.close()  這裏不會因爲PrintWriter 輸出對象沒有關閉而佔用資源的。


發佈了67 篇原創文章 · 獲贊 47 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章