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異常。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM