1. 程式人生 > >關於重定向和轉發請求的問題

關於重定向和轉發請求的問題

Java中重定向與請求轉發的區別
js學到DOM操作時老師的PPT出現了這樣一句話

2.document.URL:獲取當前文件的URL
一般情況下,該屬性的值與包含文件的 Window 的 location.href 屬性相同。
不過,在 URL 重定向發生的時候,這個 URL 屬性儲存了文件的實際 URL,而 location.href 儲存了請求的 URL。
於是詳查資料瞭解重定向與轉發請求的關係 正文如下
比喻:
請求轉發:A向B傳送請求,想讓B幫忙完成一項工作,當B接收到請求後發現自己完成不了,於是B請C幫忙,C接收到B的請求後最終完成了該項工作,並把最後的結果返回給A。此過程A只發送了一次請求給B,A只知道把請求發給B,至於B是怎麼完成的A並不關心,他只等待最終的結果。
重定向:A向B傳送請求,想讓B幫忙完成一項工作,當B接收到請求後發現自己無法完成,就立即告訴A情況,並向A推薦C可以完成該項工作,於是A就找C幫忙,C最終完成該項工作,返回給A。

不同點:
1、瀏覽器位址列顯示不同(表面區別):
無論進行多少次請求,如果使用請求轉發來實現,瀏覽器位址列中只顯示第一次傳送請求的地址;
如果使用重定向來實現,瀏覽器位址列顯示的是每次請求的新地址。這只是表面上看到的不同地方。

2、元件之間可否共享資訊不同(本質區別)
從本質上講,請求轉發時,從傳送第一次到最後一次請求的過程中,WEB容器只建立一次request和response物件,請求之間始終共享這兩個物件,所以每個請求可以訪問他之前請求中的引數和屬性的值;
而重定向時,瀏覽器每傳送一次請求,WEB容器都會重新建立新的request和response物件,所以請求之間不能共享資訊,即不能在請求中訪問到他之前請求中的引數和屬性的值。

3、實現方式不同:
3.1 請求轉發的實現步驟:
1)說明將要轉發的資源;
2)獲取請求轉發的物件;
3) 呼叫請求轉發物件中forward()方法
Java程式碼
1). String forward = “/a.jsp”;
2). RequestDispatcher rd = request.getRequestDispatcher(forward);
3). rd.forward(request, reponse);
綜合:request.getRequestDispatcher(“/a.jsp”).forward(request,response);

3.2 重定向的實現步驟:
1) 說明將要重定向的資源;
2) 呼叫response物件中sendRedirect方法
Java程式碼
1. String resource = request.geContextPath() + “/a.jsp”;
2. response.sendRedirect(resource);
綜合:response.sendRediect(request.geContextPath() + “/a.jsp”);

4、知情人不同
請求轉發的過程只有WEB伺服器知道,而瀏覽器不知道進行了多少次轉發,以及都轉發給哪些元件(servlet,JSP),它只是在等待WEB伺服器最終的結果。
而重定向時,每傳送一次請求,WEB伺服器都會通知瀏覽器的,所以重定向了幾次請求以及每次都向哪個元件傳送的請求,瀏覽器很清楚,當讓WEB伺服器也很明白。

相同點: 兩者都可以進行多次請求的轉發。
總結:什麼情況下使用重定向,什麼情況下請求轉發,這個不是看我們的習慣,而是什麼情況下必須用什麼:
重定向:之前的request中存放的變數全部失效並進入一個新session的作用域;
請求轉發:之前的request中存放的變數沒有失效,就想把兩個頁面拼在一起

然而看完這個老師的問題好像有點明白啦^_^

相關推薦

關於定向轉發請求的問題

Java中重定向與請求轉發的區別 js學到DOM操作時老師的PPT出現了這樣一句話 2.document.URL:獲取當前文件的URL 一般情況下,該屬性的值與包含文件的 Window 的 location.href 屬性相同。 不過,在

Servlet中的request對象、定向轉發的差別(6)

current https 命令 相對 eba 進入 file before redirect 1.這裏所說的request對象指的是HttpServletRequest對象,它代表client的請求,當client通過HTTP協議訪問server時。HTTP請求頭

java定向轉發的區別【轉】

提交 ttr 在服務器 幫助 action 新頁面 改變 一起 相同 response.sendredirect("http://www.foo.com/path/error.html");重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來調用

定向轉發的區別

重定向 轉發重定向轉發 重定向:客戶端像服務器端發送請求,服務器告訴客戶端你去重定向(狀態碼302,響應頭location=客戶端絕路路徑),客戶端繼續像服務器發送請求(請求地址已經成重定向的地址),服務器端給客戶端響應 轉發客戶端像服務器端發送請求,服務器將請求轉發到服務器內部,在響應給客戶端 重定向res

spring boot 的定向轉發

        學習spring boot中,這裡記錄一下spring boot中重定向和轉發的小細節。         如果是轉發的話,新增上“forward: /”+轉發的路徑就好了,如果是重定向的話,在retu

springmvc學習筆記(24)——定向轉發

重定向 重定向也是web開發中常用的,在springmvc中,重定向相當的簡單     @RequestMapping("/index")     public String index(){         ret

Java基礎之Java Web中 什麼是定向轉發?如何選擇使用定向還是轉發

1.重定向和轉發的區別是什麼? 重定向是兩次請求,轉發是一次請求,因此轉發的速度要快於重定向。 重定向之後位址列上的地址會發生變化,變化成第二次請求的地址,轉發之後位址列上的地址不會變化,還是第一次請求的地址。 重點:重定向和請求轉發之後的程式碼都會執行,直到方法結束或者遇到

jsp/servlet中定向轉發的區別

轉自:http://cantellow.javaeye.com/blog/372941 關於兩者的區別我就不用多說了,一搜一大堆,大概就是: 重定向是客戶端跳轉,轉發是伺服器端跳轉 在servlet中呼叫轉發、重定向的語句如下: request.getRequestDispatcher("new.jsp"

定向轉發引出的URL路徑問題

//轉發 //this.getServletContext().getRequestDispatcher("/index2.jsp").forward(req, resp); //重定向 //resp.

JavaWeb從入門到放棄(8)-servlet攔截器Fliter的使用(定向轉發

Filter位於javax.servlet.Filter,作用是在請求到達Servlet之前和服務端返回從Servlet返回之後對訊息進行攔截處理。 一.使用方法      1.實現Filter介面,重新init、destroy和doFilter方法,前兩個方法一個是初始化

java 定向轉發的區別

重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來呼叫目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器傳送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的URL會變成新頁

JAVAWEB開發之HttpServletResponseHttpServletRequest詳解(上)(各種亂碼、驗證碼、定向轉發

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 禁止瀏覽器快取 驗證碼圖片 // response.setH

Http中的定向轉發

    在專案開發中,經常會用到轉發和重定向,它們雖然都是轉向,但是二者卻有著本質的區別。而且,該開始接觸的時候,也不清楚到底什麼時候用轉發,什麼時候用重定向。那到底它們有什麼區別呢?又該怎麼用呢?下面就一起看看吧。 表面區別 轉發     轉發是用RequestDi

【Servlet】深入淺出Java定向請求轉發

列表 url地址 ssi 什麽 stack led 要去 處理 代碼 import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; i

javaweb中定向請求轉發(response.sendRedirect()request.getRequestDispatcher(rul).forward(request,response)))的區別

客戶端 不起作用 這也 方法 cnblogs rect() 獲取url rec alt 先來兩張圖,方便理解: 可以看出,重定向時,是服務器向遊覽器重新發送了一個response命令,讓遊覽器再次向url2發送請求,以獲取url2的資源 而請求轉發時,類似於是服務器自己

請求定向請求轉發的關系

cti 愛好 ima 重定向 3-9 req 應該 用戶名 action 測試response.sendRedirect方法 先將index.jsp中的action頁面修改成為response.jsp 然後再response.jsp頁面中執行response.sendR

HTTP中的定向請求轉發的區別

response 傳輸 觀察 web應用 ali jpg 處理 size 什麽 一、調用方式 我們知道,在servlet中調用轉發、重定向的語句如下:request.getRequestDispatcher("new.jsp").forward(request, resp

springMVC中的定向請求轉發的使用

請求轉發 controller 方法提供了一個 String 型別返回值之後, 它需要在返回值裡使用:forward: 使用說明: @RequestMapping("/forward") public String forward(){ // 通過forward關鍵字實現轉發

Servlet生命週期、常用提交方式、中文亂碼問題、定向請求轉發

//當前工作空間絕對路徑System.getProperty("user.dir"); 一個Servlet的生命週期由 例項化,初始化,提供服務,銷燬,被回收 幾個步驟組成Serlvet構造方法 只會執行一次,所以Serlvet是單例項的init初始化 只會執行一次     &

深入淺出Java 定向請求轉發的區別

import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import ja