我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          關于forward和redirect的區別

          forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。還有,轉發是在web應用程序之內進行的,可以訪問web應用程序所設定的內部目錄,像是WEB-INF目錄,只能在Web應用程序中進行,不能指定至其它的Web應用程序的地址。
          redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。web應用程序會要求客戶端瀏覽器重新發出請求地址,客戶端會重新連接至所指定的地址,因此瀏覽器的地址會出現重新導向的信息,重新導向后的請求由瀏覽器發出,所以不能訪問Web應用程序中的隱藏目錄,像是WEB-INF,重新是由瀏覽器重新要求一個網頁,可以指定至其他的Web應用程序地址。


          RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的區別是:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址,他是不會改變Request的值,如果你需要在下一個頁面中能從中獲取新的信息的話,你可以Request.setAttribute()來放置一些標志,這樣從下一個頁面中獲??;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用Request Dispatcher.forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用 HttpServletResponse.sendRequest()方法。

          1、forward與include共亨Request范圍內的對象,而redirect則不行,即:如果一個javabean被聲明為request范圍的話,則被forward到的資源也可以訪問這個javabean,而redriect則不行。
          2、forward與include基本上都是轉發到context內部的資源,而redirect可以重定向到外部的資源,如: req.sendRedriect("http://www.baidu.com");



          posted on 2007-12-12 08:34 々上善若水々 閱讀(1311) 評論(0)  編輯  收藏 所屬分類: JavaWeb

          主站蜘蛛池模板: 台中县| 芦溪县| 贡觉县| 疏附县| 乃东县| 南昌县| 太原市| 平凉市| 三台县| 南宫市| 宜阳县| 仁寿县| 榆中县| 景谷| 建湖县| 玉山县| 商丘市| 蓬莱市| 汶上县| 灌阳县| 泸溪县| 饶平县| 华蓥市| 常山县| 长丰县| 页游| 星座| 宜宾市| 颍上县| 宝鸡市| 遂平县| 江西省| 庄河市| 临沧市| 安庆市| 六安市| 壤塘县| 长阳| 会昌县| 抚州市| 卫辉市|