呼叫其他web資源
web元件可以直接或間接的呼叫其他web資源。一個web元件通過內嵌返回客戶端內容的另一個web資源的url來間接呼叫其他web資源。在執行時,一個web資源通過包含另一個資源的內容或者轉發請求到另一個資源直接呼叫。
呼叫執行web元件服務的一個有效的資源,必須首先通過getRequestDispatcher方法獲得一個RequestDispatcher物件。你可以從web上下文或者一個請求物件中獲取RequestDispatcher物件;需要注意的是,這兩個方法有一些不同的行為。該方法將所請求的路徑作為一個引數;請求可能使用相對路徑(),但web上下文必須是一個絕對路徑。如果資源是無效的,或者服務容器沒有為該型別的資源實現RequestDispatcher物件,getRequestDispatcher將返回null。 您的servlet應該準備好處理這種情況。
在響應中包含其他資源
匯入其他web資源是經常使用的,例如廣告內容或者版權資訊,包含在一個web資源返回的響應中。匯入其他web資源,呼叫RequestDispatcher物件的include方法:
include(request, response);
如果資源是靜態的,include方法啟用了程式化的服務端關聯。如果資源是一個web元件,這個方法的作用是傳送請求到要包含的web元件,執行這個web元件,然後將include包含的servlet響應執行的結果。被包含的元件可以訪問請求物件,但它對響應的處理是受限的。
- 它可以寫入響應體,並且提交響應
- 它不能設定響應頭或者呼叫任何方法,比如設定cookie,等影響請求頭的操作
將控制器轉移到另一個web資源
在某些應用程式中,你可能相對某些web資源做請求的預處理,有另一個元件生成響應。例如,你可能想去部分的處理一個請求,然後根據請求的性質呼叫另一個web元件。為了控制轉發到另一個web資源,你需要呼叫RequestDispatcher物件的forward方法。當一個請求被轉發,請求的url會被設定為轉發頁面的路徑。原始URL和他的構成部分被設定到下面的屬性中:
javax.servlet.forward.request_uri javax.servlet.forward.context_path javax.servlet.forward.servlet_path javax.servlet.forward.path_info javax.servlet.forward.query_string
應該使用forward方法為回覆使用者提供另一個資源責任。如果你已經在servlet內部響應一個ServletOutputStream物件或者PrintWriter物件,你不能使用這個方法;做這個操作,將丟擲IllegalStateException異常。