Servlet請求轉發 RequestDispatcher接口.RP
在Servlet中,利用RequestDispatcher對象,可以將請求轉發給另外一個Servlet或JSP頁面,甚至是HTML頁面,來處理對請求的響應。
一,RequestDispatcher接口方法簡介
1,RequestDispatcher對象由Servlet容器來創建,封裝一個由路徑所標識的服務器資源。
2,RequestDispatcher接口中定義了二種方法用於請求轉發:
forward(ServletRequest,ServletResponse)方法:
將請求轉發給服務器上另外一個Servlet,JSP頁面,或者HTML文件 這個方法必須在響應被提交給客戶端之前調用,否則拋出異常。
方法調用後在響應中的沒有提交的內容被自動消除。
include(ServletRequest,ServletResponse)方法 :
用於在響應中包含其他資源(Servlet,JSP頁面或HTML文件)的內容。
即請求轉發後,原先的Servlet還可以繼續輸出響應信息,轉發到的Servlet對請求做出的響應將並入原先Servlet的響應對象中。
3,forward方法和include方法的區別:
forward方法調用後在響應中的沒有提交的內容被自動消除。 include方法使原先的Servlet和轉發到的Servlet都可以輸出響應信息。
二,得到RequestDispatcher對象
三種方法可以得到RequestDispatcher對象:
1,利用ServletRequest接口中的getRequestDispatcher(String path)方法。
2,ServletContext接口中getNamedDispatcher(String path)和getRequestDispatcher(String path)方法。
ServletRequest接口和ServletContext接口中getRequestDispatcher方法區別:
1,參數的區別
參數雖然都是資源路徑名,ServletContext接口的中參數路徑必須以“/”開始,是相對於當前Servlet上下文根, ServletRequest接口中的參數路徑不僅可以相對於當前Servlet上下文根,還可以相對與當前Servlet路徑
2,跨WEB應用程序訪問資源
通過ServletContext.getContext()方法獲取另個WEB應用程序的上下文環境對象來 調用getRequestDispatcher(String path)方法 將請求轉發到另個WEB應用程序的資源。
還需要在當前WEB應用程序配置中設置<context>元素,指定crossContext屬性值為true。
三,ServletResqonse接口中的sendReadirect()方法和forward()方法的區別
二個方法都是用於請求轉發的方法,轉發給另外的資源為客戶端服務。但二者有本質的區別
sendReadirect()方法原理:
1,客戶端發送請求,Servlet1做出處理。
2,Servlet1調用sendReadirect()方法,將客戶端的請求 重新定位 到Servlet2。
3,客戶端瀏覽器訪問Servlet2.
4,Servlet2對客戶端瀏覽器做出響應。
forward()方法原理:
1,客戶端發送請求,Servlet1做出處理。
2,Servlet1調用sendReadirect()方法,將請求轉發給Servlet2來處理請求,為客戶端服務。
3,Servlet2對客戶端瀏覽器做出響應。
區別:
1,定位與轉發
sendReadirect()方法是重新定位到另外一個資源來處理請求,URL會重新定位,讓客戶端重新訪問另外一個資源。 forward()方法是轉發到另外一個資源來處理請求。URL不會變化。隱藏了處理對象的變化。
2,處理請求的資源的範圍
sendReadirect()方法可以跨WEB應用程序和服務器重新定位資源來處理請求。 forward()方法只能在應用程序內部轉發。
文轉:http://blog.csdn.net/qfs_v/article/details/2551762
Servlet請求轉發 RequestDispatcher接口.RP