这样的情况下
out.print("<script>alert('非法操作,请重新登录!');</script>");
response.sendRedirect("index.jsp");
这样子用的时候会发现,js的弹框出不来,直接执行了 index.jsp 的跳转。
这是因为out.print()要输出的东西还没发出,而服务器执行到response.sendRedirect()的时候会清空缓冲区并立即发送响应行告诉客户端要立马请求index.jsp这个页面,而客户端收到响应后会立刻执行index.jsp的请求。
如果在out.print()后面加上out.flush()或out.close()
out.print("<script>alert('非法操作,请重新登录!');</script>");
out.flush();或out.close();
response.sendRedirect("index.jsp");
这种情况下,js弹框是可以出来了,但是index.jsp的跳转又失效了。这是因为执行out.flush()或out.close()时服务器立刻刷出缓冲区并发送给客户端,因为都已经作出了响应,所以后面的语句 response.sendRedirect() 就失效了。
所以,使用以上的方式目前无解,因为两者是矛与盾的关系,有你没我,有我没你。所以不能这样组合用,只能这样子了!
out.print("<script>alert('非法操作,请重新登录!');window.location.href='index.jsp';</script>");
随心地记录一些东西,以备不时之需。