web組件能夠直接或間接的調用其餘web資源。一個web組件經過內嵌返回客戶端內容的另外一個web資源的url來間接調用其餘web資源。在執行時,一個web資源經過包含另外一個資源的內容或者轉發請求到另外一個資源直接調用。
調用運行web組件服務的一個有效的資源,必須首先經過getRequestDispatcher方法得到一個RequestDispatcher對象。你能夠從web上下文或者一個請求對象中獲取RequestDispatcher對象;須要注意的是,這兩個方法有一些不一樣的行爲。該方法將所請求的路徑做爲一個參數;請求可能使用相對路徑(),但web上下文必須是一個絕對路徑。若是資源是無效的,或者服務容器沒有爲該類型的資源實現RequestDispatcher對象,getRequestDispatcher將返回null。 您的servlet應該準備好處理這種狀況。java
導入其餘web資源是常用的,例如廣告內容或者版權信息,包含在一個web資源返回的響應中。導入其餘web資源,調用RequestDispatcher對象的include方法:web
include(request, response);
若是資源是靜態的,include方法啓用了程序化的服務端關聯。若是資源是一個web組件,這個方法的做用是發送請求到要包含的web組件,執行這個web組件,而後將include包含的servlet響應執行的結果。被包含的組件能夠訪問請求對象,但它對響應的處理是受限的。cookie
在某些應用程序中,你可能相對某些web資源作請求的預處理,有另外一個組件生成響應。例如,你可能想去部分的處理一個請求,而後根據請求的性質調用另外一個web組件。爲了控制轉發到另外一個web資源,你須要調用RequestDispatcher對象的forward方法。當一個請求被轉發,請求的url會被設置爲轉發頁面的路徑。原始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異常。spa