在Java 中,跳轉的實作方式有兩種:請求轉送和請求重定向,但二者是完全不同的,所以我們今天就來盤它。
請求轉送和請求重定向主要區別,包含以下5 點:
#定義不同
跳轉方不同
資料共享不同
#最終URL 位址不同
請求轉送(Forward):發生在服務端程式內部,當伺服器端收到一個客戶端的請求之後,會先將請求,轉送給目標位址,再將目標位址回傳的結果轉送給客戶端。 而客戶端對於這一切毫無感知的,這就好比,張三(客戶端)找李四(伺服器端)借錢,而李四沒錢,於是李四又去王五那借錢,並把錢借給了張三,整個過程中張三隻借了一次款,剩下的事情都是李四完成的,這就是請求轉發。 **請求重定向(Redirect):請求重定向指的是伺服器端接收到客戶端的請求之後,會給客戶端回傳了一個臨時回應頭,這個臨時回應頭中記錄了,客戶端需要再次發送請求(重定向)的URL 位址,客戶端再收到了位址之後,會將請求傳送到新的位址上,這就是請求重新導向。 **這就好像張三(客戶端)找李四(伺服器端)借錢,李四沒錢,於是李四就告訴張三,「我沒錢,你去王五那借“,於是張三又去王五家借了錢,這就是請求重定向。
2.請求方不同從上面請求轉發和請求重定向的定義,我們可以看出:請求轉發是伺服器端的行為,伺服器端代替客戶端傳送請求,並將結果傳回給客戶端;而請求重定向是客戶端的行為,它們的互動流程,如下圖所示:
##3.資料共享不同
4.最終URL 位址不同
5.程式碼實作不同
在SpringBoot 中,請求轉送的實作程式碼如下:@RequestMapping("/fw")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.html").forward(request, response);
}
@RequestMapping("/rt")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect("/index.html");
}
以上是Java請求轉送和請求重定向有哪些區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!