RequestDispatcher接口的include()方法與forward()方法的區別

RequestDispatcher接口的include()方法與forward()方法的區別 

RequestDispatcher接口所定義的forward()方法能夠將HTTP請求轉送給其餘Web資源(例如Servlet、JSP或HTML)進行處理,併產生HTTP迴應。RequestDispatcher接口的include()方法與forward()方法很是相似,唯一的不一樣在於:利用include()方法將HTTP請求轉送給其餘Servlet後,被調用的Servlet雖然能夠處理這個HTTP請求,可是最後的主導權仍然是在原來的Servlet。RequestDispatcher是一個Web資源的包裝器,能夠用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。RequestDispatcher接口中定義了兩個方法:include/forward因爲<jsp:include>只能指定固定的jsp文件名,不能動態指定jsp文件名。咱們須要把<jsp:include>翻譯爲Java code – RequestDispatcher.include(); 

用法: 
<% request.getRequestDispatcher(filename).include(request, response); /> 

服務器端的重定向能夠有兩種方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法. 

HttpServletResponse.sendRedirect()方法將響應定向到參數location指定的、新的URL。location能夠是一個絕對的URL,如 response.sendRedirect("http://java.sun.com")也可使用相對的URL。若是location以「/」開頭,則容器認爲相對於當前Web應用的根,不然,容器將解析爲相對於當前請求的URL。這種重定向的方法,將致使客戶端瀏覽器的請求URL跳轉。從瀏覽器中的地址欄中能夠看到新的URL地址,做用相似於上面設置HTTP響應頭信息的實現。 


RequestDispatcher.forward()方法將當前的request和response重定向到該 RequestDispacher指定的資源。這在實際項目中大量使用,由於完成一個業務操做每每須要跨越多個步驟,每一步驟完成相應的處理後,轉向到下一個步驟。好比,一般業務處理在Servlet中處理,處理的結果轉向到一個JSP頁面進行顯示。這樣看起來相似於Servlet鏈的功能,可是還有一些區別。一個RequestDispatcher對象能夠把請求發送到任意一個服務器資源,而不單單是另一個Servlet。 include()方法將把Request Dispatcher資源的輸出包含到當前輸出中。 

注意,只有在還沒有向客戶端輸出響應時才能夠調用forward()方法,若是頁面緩存不爲空,在重定向前將 

自動清除緩存。不然將拋出一個IllegalStateException異常。 java

相關文章
相關標籤/搜索