1. 程式人生 > >Servlet請求轉發 RequestDispatcher接口.RP

Servlet請求轉發 RequestDispatcher接口.RP

post 元素 clu targe 獲取 url 區別 rect size

在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