close
Java Web 程式設計 sendRedirect與requestDispatcher的限制
1. RequestDispatcher限制

當於程式中使用以下敘述

PrintWriter out = response.getWriter();
out.println("after use PrintWriter:"+response.isCommitted());
out.flush();

取得了response的PrintWriter物件並呼叫flush()這個method後,則無法再使用以下敘述將request及
response forward到另一個jsp或靜態網頁,若程式中本身無錯誤造成Exception丟出,亦不會因以下程
式丟出Exception。

RequestDispatcher requestDispatcher =
getServletContext().getRequestDispatcher("/jsp/OrderdbQuery.jsp");
requestDispatcher.forward(request,response);

2. response.sendRedirect(URI) 限制

當於程式中使用以下敘述

PrintWriter out = response.getWriter();
out.println("after use PrintWriter:"+response.isCommitted());
out.flush();

取得了response的PrintWriter物件並呼叫flush()這個method後(不論flush()是在doGet() 或doPost()
甚至Helper method內被呼叫的)即無法使用response.sendRedirect(URI) 將response傳送到另一個jsp
或靜態網頁,若程式中本身無錯誤造成Exception丟出,程式亦不會因該行程式丟出Exception。

3. 以上兩個限制的原因皆是由於response已經commit,而response commited的原因則是因為由response取
得的PrintWriter物件,已於此Servlet或JSP中的任何一個地方呼叫了flush()這個method。



arrow
arrow
    全站熱搜

    npitt 發表在 痞客邦 留言(0) 人氣()