protected void doPost() { if (someCondition) { sendRedirect(); } forward(); // This is STILL invoked when someCondition is true! }
解决方法是加一个return或加一个else分支:
protected void doPost() { if (someCondition) { sendRedirect(); return; } forward(); }或
protected void doPost() { if (someCondition) { sendRedirect(); }else{ forward(); } }
但是我的代码中sendRedirect是最后一句代码,后面跟着return,居然还有这个运行错误.
原因在于jsp中response具有缓存大小的限制,如果达到这个限制,那么所有HTTP response headers和写入的html代码都会发送回客户端,也就是response is committed.虽然你没有显式指定返回.
检查了一下我的代码,原来我为了测试用如下代码向response写入了很多单词:
PrintWriter out = response.getWriter(); for( String str: result ) out.print(str + " "); out.println(result.size()); out.close();
注释掉这段代码之后就可以正常运行了.
参考:
1.http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-been-committe/2125045#2125045
2.http://stackoverflow.com/questions/12693975/java-lang-illegalstateexception-cannot-call-sendredirect-after-the-response-h
没有评论:
发表评论