DBMNG数据库管理与应用

科学是实事求是的学问,来不得半点虚假。
当前位置:首页 > 服务器配置 > Resin

Resin4重定向错误:Can't sendRedirect() after data has committed to the client.

resin下

response.sendRedirect("XXX");

在压力测试下会报出

java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.

以前也碰到过这个问题,gg找了下,大都说是因为在sendRedirect前调用了out.flush();

实际上没有调用,一般也很少会去掉用out.flush();

然后碰到一个搜索结果说是在resin下,如果sendRedirect后不跟return;会出这个问题(确实没加!!)

遂全部加上return,重新测试,果然不出异常了!!

这是为什么呢?

终于找到一种说法

应该是你在做登陆时用户名和密码判断后,做的页面跳转有问题,按照异常来理解,应该是服务器已经返回了状态200或者404或者其他的状态码,但是又执行了重定向的代码,返回302状态码。服务器同一次相应应该只返回一种状态,建议最后把你的登陆判断逻辑完整的发上来看看

原来,response.sendRedirect执行后,应用服务器还是会执行接下去的代码的,所以一般都可以通过return语句中断

如果没有中断,而且接下去又有返回状态码的语句时,就会报这个错

写个例子测试下

response.sendRedirect(request.getAttribute("ROOT").toString() + "/");

response.sendRedirect(request.getAttribute("ROOT").toString() + "/");

执行后果然报错

之所以正常情况下不能重现,而压力测试下才会出现这问题, 我想纯属巧合吧, 压力测试有些操作不走流程, 逻辑上碰巧满足连着2次sendRedirect.

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号