+請求轉發和重定向的區別

 

   在java中實現頁面跳轉一般有兩種方式,一種是請求轉發,一種是重定向,那麼這兩者有什麼區別呢?
一、請求轉發
       請求轉發一般是這樣的一個過程:客戶端發送請求到服務器端,服務器端經過匹配的servlet,並執行,當這個servlet執行完之後,調用getRequestDispacther()方法,把請求轉發給指定的頁面,整個流程都是在服務器端完成的,而且是在同一個請求裏面完成的,因此servlet和頁面共享的是同一個request,在servlet裏面放的所有東西,在頁面中都能取出來,整個過程是一個請求,一個響應。
       如果以現實生活中的例子來舉例,那麼以拿快遞來舉例是比較好的。比如,A有快遞到了,但是沒有時間,那麼A讓B幫忙取快遞,但是B答應了,想去取得時候B也沒有時間,就讓C取,C取好快遞之後,交給A。
二、重定向
       重定向一般是這樣的過程:客戶端發送請求到服務器端,服務器端經過匹配的servlet,並執行,前面這個步驟是和請求轉發一樣,處理完之後調用了sendRedirect()方法,這個方法是response的方法,所以調用這個方法會向客戶端返回這個響應,客戶端會再次發送一個請求,去訪問指定頁面,緊接着客戶端受到這個請求後,立刻發出一個新的請求,去請求訪問頁面。
       上面過程中含有兩個請求,這兩個請求互不干擾,相互獨立,在前面request裏面setAttribute()的任何東西,在後面的request裏面都獲得不了。整個裏面是兩個請求,兩個響應。
         如果以現實生活中的例子來舉例,那麼還以拿快遞來舉例是比較好的。比如,A有快遞到了,但是沒有時間,那麼A讓B幫忙取快遞,但是B沒有答應,讓A再找人去取,所以A再請C幫忙取,C取好快遞之後,交給A。
三、區別
       通過上面上面的說明,我們可以總結以下請求轉發與重定向的區別:

項目 請求轉發 重定向
發送了幾次請求? 1次 2次
地址欄是否改變 不變 變,顯示的是第二次的地址
是否共享request 是,在request中存的數據,在頁面上可以取出
可以跳轉的資源 項目內部 項目內部,外部的資源都可以
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章