天天看點

關于response.sendRedirect java.lang.IllegalStateException異常

今天在編寫Filter時,在doFilter内使用response.sendRedirect來跳轉時抛出response.sendRedirect java.lang.IllegalStateException異常,解決後需要注意以下幾點:

1.res.sendRedirect方法不能與chain.doFilter(request, response)同時調用,也就是說兩個功能都是做頁面跳轉,必須唯一性。如:

if(usr.equals("admin")){

chain.doFilter(request, response);

}else{

res.sendRedirect("/sony/index.html");

}

2.在使用response.sendRedirect時,前面不能有HTML輸出。

這并不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了浏覽器。事實上現在的server都有cache機制,一般在8K(我是說JSP SERVER),這就意味着,除非你關閉了cache,或者你使用了out.flush()強制重新整理,那麼在使用sendRedirect之前,有少量的HTML輸出也是允許的。如果報錯說,“一些資訊已經被submitted”(原文忘了),那麼,你就要注意看了,前面是不是有過多的HTML輸出了。

3.在response.sendRedirect之後,應該緊跟一句return;

我們已經知道response.sendRedirect是通過浏覽器來做轉向的,是以隻有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因為後面的輸出導緻轉向失敗。