1. 程式人生 > >請求轉發和請求包含的區別

請求轉發和請求包含的區別

這個問題是非常重要的,是高校的期末考試和公司面試中經常出現的問題,請求轉發,和請求包含,

二者的共同特點:

       *這兩種都是一個請求跨多個Servlet(可以共享request的域屬性)

       *多個Servlet在一個請求中共享一個Request物件,比如說就是:在AServlet.setAttribuet()方法執行之後,可以在BServlet.getAttribute();

二者的區別:

       *請求轉發可以這樣理解:如果ASerlet轉發到BServlet 中,那麼這個請求就交給bServlet來處理,ASevlet就不要插手了。

       *請求包含,例如:AServlet包含BServlet,那麼這兩個Servlet共同處理請求

二者的聯絡:

       請求轉發和請求包含都需要一個相同的物件,RequestDispatcher,

RequestDispatcherrd = request.getRequestDispatcher(“path”),這個方法的引數是你要轉發或者包含的Servlet的<url-patting>,
rd.forword(request,response)//請求轉發,

(給下一個Servlet傳遞引數request和response,如果Aservlet已經請求Bservlet ,那麼Aservlet就不要在繼續執行響應了,否則的結果就是伺服器並不會把Aservlet請求之後使得資料發出,並且把資料清空。)

rd.include(request,response)//請求包含


請求:

如果Aservlet請求BServlet那麼A中最好不要在新增響應體,否則導致的結果即是兩種,但是新增響應頭是可以的(就是“留頭不留體”)

*資料被清空,不會發送到客戶端。

*資料已提交但是在轉發時出現異常。

包含:

       簡稱留頭又留體,由兩個Servlet共同完成響應。

!!!請求轉發(請求包含)於重定向之間的區別:

       1:請求轉發是一個請求,但是重定向是兩個請求。

       2:請求轉發只能是一種請求方式,要麼是Get要麼是Post ,但是重定向的第二個請求一定是Get。

       3:請求轉發的位址列並不會發生變化,但是重定向的會變化,因為它是兩個請求。

       4:請求轉發只能在本應用下的資源,但是重定向卻可以跨應用,比如重定向到百度的主頁。