閱讀643 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JAVA麵試題Forward和Redirect區別

1.從地址欄顯示來說

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.

redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

2.從數據共享來說

forward:轉發頁麵和轉發到的頁麵可以共享request裏麵的數據.

redirect:不能共享數據.

3.從運用地方來說

forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.

redirect:一般用於用戶注銷登陸時返回主頁麵和跳轉到其它的網站等.

4.從效率來說

forward:高.

redirect:低

undefined

如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。

閱讀目錄

一:間接請求轉發(Redirect)

二:直接請求轉發(Forward)

用戶向服務器發送了一次HTTP請求,該請求可能會經過多個信息資源處理以後才返回給用戶,各個信息資源使用請求轉發機製相互轉發請求,但是用戶是感覺不到請求轉發的。根據轉發方式的不同,可以區分為直接請求轉發(Forward)和間接請求轉發(Redirect),那麼這兩種轉發方式有何區別呢?本篇在回答該問題的同時全麵的講解兩種請求轉發方式的原理和區別。

【出現頻率】

【關鍵考點】

請求轉發的含義;

Forward轉發請求的原理;

Redirect轉發請求的原理。

【考題分析】

Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。

直接轉發方式(Forward),客戶端和瀏覽器隻發出一次請求,Servlet、HTML、JSP或其它信息資源,由第二個信息資源響應該請求,在請求對象request中,保存的對象對於每個信息資源是共享的。

間接轉發方式(Redirect)實際是兩次HTTP請求,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。

舉個通俗的例子:

直接轉發就相當於:“A找B借錢,B說沒有,B去找C借,借到借不到都會把消息傳遞給A”;

間接轉發就相當於:"A找B借錢,B說沒有,讓A去找C借"。

下麵詳細闡述一下兩者的原理:

回到頂部

一:間接請求轉發(Redirect)

間接轉發方式,有時也叫重定向,它一般用於避免用戶的非正常訪問。例如:用戶在沒有登錄的情況下訪問後台資源,Servlet可以將該HTTP請求重定向到登錄頁麵,讓用戶登錄以後再訪問。在Servlet中,通過調用response對象的SendRedirect()方法,告訴瀏覽器重定向訪問指定的URL,示例代碼如下:

複製代碼

......

//Servlet中處理get請求的方法

public void doGet(HttpServletRequest request,HttpServletResponse response){

//請求重定向到另外的資源

response.sendRedirect("資源的URL");

}

........

JAVA麵試題Forward和Redirect區別

上圖所示的間接轉發請求的過程如下:

瀏覽器向Servlet1發出訪問請求;

Servlet1調用sendRedirect()方法,將瀏覽器重定向到Servlet2;

瀏覽器向servlet2發出請求;

最終由Servlet2做出響應。

回到頂部

二:直接請求轉發(Forward)

直接轉發方式用的更多一些,一般說的請求轉發指的就是直接轉發方式。Web應用程序大多會有一個控製器。由控製器來控製請求應該轉發給那個信息資源。然後由這些信息資源處理請求,處理完以後還可能轉發給另外的信息資源來返回給用戶,這個過程就是經典的MVC模式。

javax.serlvet.RequestDispatcher接口是請求轉發器必須實現的接口,由Web容器為Servlet提供實現該接口的對象,通過調用該接口的forward()方法到達請求轉發的目的,示例代碼如下:

......

//Servlet裏處理get請求的方法

public void doGet(HttpServletRequest request , HttpServletResponse response){

//獲取請求轉發器對象,該轉發器的指向通過getRequestDisPatcher()的參數設置

RequestDispatcher requestDispatcher =request.getRequestDispatcher("資源的URL");

//調用forward()方法,轉發請求

requestDispatcher.forward(request,response);

}

......

JAVA麵試題Forward和Redirect區別

上圖所示的直接轉發請求的過程如下:

瀏覽器向Servlet1發出訪問請求;

Servlet1調用forward()方法,在服務器端將請求轉發給Servlet2;

最終由Servlet2做出響應。

技巧:其實,通過瀏覽器就可以觀察到服務器端使用了那種請求轉發方式,當單擊某一個超鏈接時,瀏覽器的地址欄會出現當前請求的地址,如果服務器端響應完成以後,發現地址欄的地址變了,則證明是間接的請求轉發。相反,如果地址沒有發生變化,則代表的是直接請求轉發或者沒有轉發。

問:直接轉發和間接轉發的原理及區別是什麼?

答:Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。對應到代碼裏,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sendRedirect()方法。

對於間接方式,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request對象。

對於直接方式,客戶端瀏覽器隻發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它信息資源,由第2個信息資源響應該請求,兩個信息資源共享同一個request對象。

最後更新:2017-06-08 15:01:49

  上一篇:go  Java小白看過來,Java目前的就業前景怎麼樣
  下一篇:go  即日起,技術博客從博客園遷移至阿裏雲