java web兩種跳轉方式的區別

個人小總結:

      1、客戶端跳轉:地址欄內容改變,發生了2次請求,“/”代表服務器路根路徑,即“/”代表服務器目錄下的webapps目錄,webapps目錄下有不同的web應用。一般項目開發中,response.sendRedirect("/test(web應用)/login.jsp")屬於發生在客戶端的跳轉

      2、服務器端跳轉:地址欄內容不變,“/”代表站點根路徑,即“/”代表web應用程序下的根路徑,屬於內部跳轉。

一般地,request.getRequestDispatcher("/ulogin.jsp").forward(request, response)屬於發生在服務器端的內部跳轉。

(網上轉載)

服務器端跳轉與客戶端跳轉:

       首先我們需要理解什麼是服務器端跳轉,什麼是客戶端的跳轉。簡單理解所謂服務器端跳轉就是指地址欄內容不變(客戶端瀏覽器的地址欄不會顯示目標地址的URL),而客戶端跳轉是指地址欄內容發生改變(客戶端向服務器發請求,然後服務器再給客戶端一個響應,然後客戶端再根據服務器端給的響應中的URL再向服務器發送請求,所以是兩次請求,因此地址欄改變了顯示最後一次請求地址)


服務器端跳轉:
     1、request.getRequestDispatcher("/success.jsp").forward(request,response),它是隻要執行到此語句之後則立刻進行跳轉,可以傳遞request屬性;

     2、<jsp:forward>,這種跳轉屬於無條件跳轉,它只能在棧內轉,而sendRedirect中則可以任意轉,甚至可以輸入baidu


客戶端跳轉:
1、response.sendRedirect("fail.jsp"),所有頁面執行完之後再進行跳轉,不能傳遞request範圍的屬性,但是可以通過地址重寫的方式向跳轉頁傳遞參數,因爲該方法執行完之後就相當於一次http request的結束,這是服務器會向客戶端發送302狀態碼和新的url,告訴客戶端重新發送request請求到新的url,然後客戶端照此執行,執行即新的請求響應流程開始,服務器再重新創建HttpServletRequest對象和HttpServletResponse對象,此時兩個請求已經不在一個線程了,所以request和response對象都不是開始的那個了;
       2、response.setHeader("refresh","2;URL=index.jsp"),2秒後跳轉到其他頁面;
       3、<a href="http://www.baidu.com">百度</a>,超鏈接;

通過以上可以得知,如果現在一個頁面中使用了JDBC,則應該在forward跳轉之前關閉數據庫鏈接,而使用respose則可以在任意的位置處關閉.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章