Cannot forward after response has been committed 異常原因


在進行登錄或回帖操作后,跳轉頁面成功,但在控制台出現了以下異常。

java.lang.IllegalStateException: Cannot forward after response has been committed 

意味response已經被提交,不能再跳轉了。這個錯誤的出現是因為response多次提交或在跳轉到頁面后仍有跳轉請求。

找了網上的一些帖子,總結出下列幾點常見的原因:

一、往輸出流寫入了東西,然后又跳轉了頁面。

RequestDispatcher disrequest.getRequestDispatcher("queryall.ftl");

           dis.forward(request,response);

在此語句跳轉之前,你使用了文件操作流;可以先注釋掉再嘗試。

二、用out對象,向JSP頁面print了數據,然后又跳轉。

PrintWriter out = response.getWriter();

                     out.println(“<html>”);

獲得了out對象,往JSP頁面打印輸出,如果有這樣的語句會報錯,因為我們寫的servlet類,就是用來響應用戶的訪問請求的,而out.print()是要把內容輸出到(響應)頁面,也是對用戶訪問的響應,所以如果在跳轉之前有out.println(“<html>”)相當於已經response響應了用戶請求,所以再dis.forward(request,response就會)提示已經重復提交。

三、可能由於調用了父類的super.doPost(request,response);

這是因為,doPost()[doXXX()]方法就是service()執行過程中判斷用戶訪問方式(post、get等)后,調用的響應響應方法,即執行相應的doXXX()方法去響應用戶,而顯示調用父類的doPost()方法,且先執行完,就等於已經響應了一次,然后又去跳轉又去響應,就會報錯重復提交。所以去掉super.doPost(request,response)。

4、最后一種

正如前面所說,這個是錯誤是由於response多次提交或者是由於有頁面顯示后仍然含請求轉向產生的,就是說程序在return之前就已經執行了跳轉或者執行過response,之后遇到return的話,程序想再次執行跳轉,也就是重定向,這時功能也許會實現了,解決辦法是在跳轉語句末尾加上return;或return null;就不能轉到另外的頁面了

如 servlet.getServletContext().getRequestDispatcher("/deal.jsp").forward(request, response);  

 return null; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM