forword與include區別
Forword與include還有一個重要的區別:
forword在調用者程序中設置的響應的狀態碼和響應頭不會被忽略在被調用者程序中設置響應狀態碼和響應頭也不會被忽略。
Include會被忽略
這也是亂碼的一個原因,使用include的時候要調用程序中寫上respose.setContentType(“text/html;charest=utf-8”)不管你是不是用filter統一處理過的字符。
RequestDispatcher.forward()方法
RequestDispatcher接口所定義的forward()方法可以將HTTP請求轉送給其他Web資源(例如Servlet、JSP或HTML)進行處理,併產生HTTP迴應。
調用forward()方法時必須注意下列兩點:
在HTTP迴應被“確認”(committed)以前才能調用forward()方法(這裏的“確認”是指將HTTP迴應的內容主體送回用戶端),否則將拋出IllegalStateException異常。
調用forward()方法後,原先存放在HttpResponse對象中的內容將會自動被清除(本章稍後的實例演練2-3將探討此議題)。
RequestDispatcher.include()方法
RequestDispatcher接口的include()方法與forward()方法非常類似,惟一的不同在於:利用include()方法將HTTP請求轉送給其他Servlet後,被調用的Servlet雖然可以處理這個HTTP請求,但是最後的主導權仍然是在原來的Servlet。換言之,被調用的Servlet如果產生任何HTTP迴應,將會併入原來的HttpResponse對象