out.print()與response.sendRedirect()

這樣的情況下

  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>");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章