请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include
當(dāng)一個 Web資源 收到客戶端的請求后,如果希望服務(wù)器通知另一個web資源處理請求,那么這時可以通過 RequestDispatcher 接口的實(shí)例對象實(shí)現(xiàn)。
web資源分為靜態(tài)和動態(tài)
靜態(tài)web資源是瀏覽器能夠直接打開的。如:html、css、 js等
動態(tài)web資源是經(jīng)過翻譯之后瀏覽器能夠打開的。如:jsp、servlet、php、ASP等
RequestDispatcher對象
RequestDispatcher getRequestDispatcher (String path)
參數(shù):path必須以/開頭,用于表示當(dāng)前 Web 應(yīng)用的根目錄
web應(yīng)用的根目錄在idea中是web;在eclipse中是webcontent
需要注意的是,WEB-INF目錄中的內(nèi)容對 RequestDispatcher 對象也是可見的。因此,傳遞給 getRequestDispatcher(String path) 方法的資源可以是 WEB-INF 目錄中的文件
返回值:某條路徑所指定資源的 RequestDispatcher 對象
獲取到 RequestDispatcher對象后,便是通知其他 Web 資源處理當(dāng)前的 Servlet 請求,為此,RequestDispatcher 接口定義了兩個相關(guān)方法:forward()、include()
forward()與include()
| forward(ServletRequest request, ServletResponse response) | 第一個web資源對請求做一個初步處理,然后通過調(diào)用這個方法,將請求傳遞給其他資源進(jìn)行響應(yīng)。需要注意的是,該方法必須在響應(yīng)提交給客戶端之前被調(diào)用,否則將拋出 IllegalStateException 異常 |
| include(ServletRequest request, ervletResponse response) | 該方法用于將其他的資源作為當(dāng)前響應(yīng)內(nèi)容包含進(jìn)來 |
| 使用場合不同 | 將控制權(quán)轉(zhuǎn)移到其它組件 | 須由另一組件執(zhí)行部分處理,一旦執(zhí)行完畢,當(dāng)前組件將收回控制權(quán) |
| 輸出結(jié)果不同 | 在請求轉(zhuǎn)發(fā)之前,web組件不應(yīng)使用輸出流向客戶端發(fā)送消息 | 所有web組件共享同一個輸出流與客戶機(jī)進(jìn)行通信 |
| 相同點(diǎn) | 均是在服務(wù)器端完成的,因此地址欄中只顯示原URL,不顯示跳轉(zhuǎn)后的URL | 均是在服務(wù)器端完成的,因此地址欄中只顯示原URL,不顯示跳轉(zhuǎn)后的URL |
動手練一下吧!
關(guān)于requset的forward()、include()跳轉(zhuǎn)的實(shí)例代碼
參考文章:
總結(jié)
以上是生活随笔為你收集整理的请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决问题:EnvironmentLoca
- 下一篇: 代码实例--请求的转发:RequestD