问题描述
我的代码为:publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setCharacterEncoding("GBK");PrintWriterout=response.getWriter();if(!validator.equals(in_validateCode)){out.println("<scripttype="text/javascript">");out.println("alert('验证码填写错误!')");out.println("</script>");out.flush();out.close();response.sendRedirect("../index.jsp");}}其中:out.flush();out.close();和response.sendRedirect("../index.jsp");好像不能同时使用,有java.lang.IllegalStateException:Responsealreadycommitted异常抛出但我在帮助文档中没有找到那里出的问题.请大家帮我指出问题所在,谢谢!!!!!
解决方案
解决方案二:
试下看可不可以帮助你。request.getRequestDispatcher("/index.jsp").forward(request,response);
解决方案三:
试下看可不可以帮助你。request.getRequestDispatcher("/index.jsp").forward(request,response);
解决方案四:
你把位置换一下,先重定向,然后再清空,关闭
解决方案五:
建议楼主先试试3楼的,然后再试试2楼的
解决方案六:
还是不行,3楼,在我这里测试显示:可以完成跳转,但alert('验证码填写错误')没有看到!2楼,在我这里测试显示如果在out.flush();out.close();后面使用,就会有异常java.lang.IllegalStateException:Cannotforwardaresponsethatisalreadycommitted抛出如果在out.flush();out.close();前面使用,和3楼的问题一样,没有看到alert('验证码填写错误')辛苦大家了,谢谢!!!!!!!
解决方案七:
xuexi
解决方案八:
用了flush,就不要用close
解决方案九:
out.flush();时服务器会把请求头部分以及现成的其他response体刷到客户端,这里response置为commited,不能再改变其请求头,而response.sendRedirect("../index.jsp");要改变location请求头,当然不行了.
解决方案十:
out.print("<scriptlanguage='javascript'>");out.print("alert('提交成功');");out.print("window.location.href='/XXX/yyy.jsp?aaa=78';");out.print("</script>");
解决方案十一:
应该不是这个地方的事吧,这两天不会影响吧?
解决方案十二:
引用9楼coolbamboo2008的回复:
out.print("<scriptlanguage='javascript'>");out.print("alert('提交成功');");out.print("window.location.href='/XXX/yyy.jsp?aaa=78';");out.print("</script>");
先试试这个或者直接用ajax吧不用打印js代码了
解决方案十三:
他们不能在一起用的,你想想看,你的serlvet,用的printwriter,它就不能再用sendredirect了,你想实现什么样的功能?
解决方案十四:
out.close();加response.reset();试试response.sendRedirect("../index.jsp");
解决方案十五:
out都关了response.sendRedirect("../index.jsp");是要往客户端头信息写东西的关掉了就写不过去了