我有我的web應用程序下面的代碼片段:的flush()在rd.include VS rd.forward()
if (request.getParameter("user").equals("luke")||session == null && !(uri.endsWith("html") || uri.endsWith("LoginServlet"))) {
System.out.println("<<<----------denied------------->>>>");
pw.println("zzzzzzzzzz");
this.context.log("Unauthorized access request");
pw.flush();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//res.sendRedirect("login.html");
req.getRequestDispatcher("login.html").include(request,response);
}
當我進(),它拋出IllegalStateException
之前使用沖洗(因爲響應在我們調用flush的那一刻發送,之後我們試圖使用forward來重新發送響應),但即使我在rd.include()
之前提供了flush之後,代碼也能正常工作。爲什麼不在這裏拋出異常?
TIA
這是正確的,但刷新提交輸出流的狀態和響應發送到客戶端,那麼爲什麼在包含的情況下,異常不會引發時,通過rd.include()再次發送響應。 – 2014-09-04 19:39:12
@jayendrabhatt它沒有發送_again_。 'include'的內容被添加(附加)到響應**主體**中。 – 2014-09-04 20:21:31
由於我的無知道歉,但當我們試圖使用include追加信息時,響應已經消失(由於flush),那麼頁面如何被包含?請糾正我,如果我錯了 – 2014-09-05 04:29:10