在
java中,forward指的是「直接轉送方式」。對於直接方式,客戶端瀏覽器只發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它信息資源,由第二個信息資源響應該請求,在請求對象request中,保存的對象對於每個資訊資源是共享的。
用戶向伺服器發送了一次HTTP請求,該請求可能會經過多個資訊資源處理以後才傳回給用戶,各個資訊資源使用請求轉送機制相互轉送請求,但是使用者是感覺不到請求轉送的。根據轉送方式的不同,可以區分為直接請求轉送(Forward)和間接請求轉送(Redirect)。
直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML、JSP或其它資訊資源,由第二個資訊資源回應該請求,在請求物件request中,保存的物件對於每個資訊資源是共享的。
間接轉發方式(Redirect)實際上是兩次HTTP請求,伺服器端在回應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。
舉個通俗的例子:
直接轉發就相當於:「A找B借錢,B說沒有,B去找C借,借到借不到都會把訊息傳遞給A」;
間接轉發就相當於:「A找B借錢,B說沒有,讓A去找C借」。
詳解直接轉送方式(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); }......
上圖所示的直接轉送請求的程序如下:
瀏覽器向Servlet1發出存取請求;
Servlet1呼叫forward()方法,在伺服器端將請求轉送給Servlet2;
最終由Servlet2回應。
技巧:其實,透過瀏覽器就可以觀察到伺服器端使用了那種請求轉發方式,當點擊某一個超連結時,瀏覽器的網址列會出現當前請求的位址,如果伺服器端回應完成以後,發現網址列的位址變了,證明是間接的請求轉送。相反,如果位址沒有發生變化,則代表的是直接請求轉送或沒有轉送。
擴充資料:
直接轉送和間接轉送的原理及差異是什麼?
答案:Forward和Redirect代表了兩種請求轉送方式:直接轉送和間接轉送。對應到程式碼裡,分別是RequestDispatcher類別的forward()方法和HttpServletRequest類別的sendRedirect()方法。
對於間接方式,伺服器端在回應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request物件。
對於直接方式,客戶端瀏覽器只會發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它資訊資源,由第2個資訊資源回應該請求,兩個資訊資源共用同一個request物件。
以上是java中forward是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!