欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA面試題之Forward與Redirect的區(qū)別詳解

 更新時間:2017年05月10日 11:49:17   作者:阿赫瓦里  
這篇文章主要給大家介紹了在JAVA面試中可能遇到會遇到的一道題,就是java中Forward與Redirect兩者之前的區(qū)別,文中介紹的非常詳細,對大家具有一定參考學習價值,需要的朋友們下面來一起看看吧。

前言

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

【關(guān)鍵考點】

       •請求轉(zhuǎn)發(fā)的含義;

      •Forward轉(zhuǎn)發(fā)請求的原理;

      •Redirect轉(zhuǎn)發(fā)請求的原理。

【考題分析】

  Forward和Redirect代表了兩種請求轉(zhuǎn)發(fā)方式:直接轉(zhuǎn)發(fā)和間接轉(zhuǎn)發(fā)。

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

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

舉個通俗的例子:

  直接轉(zhuǎn)發(fā)就相當于:“A找B借錢,B說沒有,B去找C借,借到借不到都會把消息傳遞給A”;

  間接轉(zhuǎn)發(fā)就相當于:"A找B借錢,B說沒有,讓A去找C借"。

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

一:間接請求轉(zhuǎn)發(fā)(Redirect)

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

......
//Servlet中處理get請求的方法
public void doGet(HttpServletRequest request,HttpServletResponse response){
//請求重定向到另外的資源
 response.sendRedirect("資源的URL");
}
........

              

上圖所示的間接轉(zhuǎn)發(fā)請求的過程如下:

       1.瀏覽器向Servlet1發(fā)出訪問請求;

       2.Servlet1調(diào)用sendRedirect()方法,將瀏覽器重定向到Servlet2;

       3.瀏覽器向servlet2發(fā)出請求;

       4.最終由Servlet2做出響應。

二:直接請求轉(zhuǎn)發(fā)(Forward)

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

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

......
 //Servlet里處理get請求的方法
 public void doGet(HttpServletRequest request , HttpServletResponse response){
  //獲取請求轉(zhuǎn)發(fā)器對象,該轉(zhuǎn)發(fā)器的指向通過getRequestDisPatcher()的參數(shù)設置
 RequestDispatcher requestDispatcher =request.getRequestDispatcher("資源的URL");
 //調(diào)用forward()方法,轉(zhuǎn)發(fā)請求  
 requestDispatcher.forward(request,response); 
}
......

         

上圖所示的直接轉(zhuǎn)發(fā)請求的過程如下:

      1.瀏覽器向Servlet1發(fā)出訪問請求;

      2.Servlet1調(diào)用forward()方法,在服務器端將請求轉(zhuǎn)發(fā)給Servlet2;

      3.最終由Servlet2做出響應。

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

問:直接轉(zhuǎn)發(fā)和間接轉(zhuǎn)發(fā)的原理及區(qū)別是什么?

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

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。最后,祝大家都能找到一個稱心滿意的工作!

相關(guān)文章

  • springboot2.0使用Hikari連接池的方法(替換druid)

    springboot2.0使用Hikari連接池的方法(替換druid)

    這篇文章主要介紹了springboot 2.0使用Hikari連接池的方法(替換druid),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • JAVA實現(xiàn)生成短鏈接的示例代碼

    JAVA實現(xiàn)生成短鏈接的示例代碼

    短鏈接就是將長度較長的鏈接壓縮成較短的鏈接,本文就來介紹一下JAVA實現(xiàn)生成短鏈接的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Java使用枚舉替代if/else和switch-case語句的實踐

    Java使用枚舉替代if/else和switch-case語句的實踐

    在軟件開發(fā)中if-else和switch-case語句經(jīng)常被用來處理不同的條件分支,但在大型項目中,這種做法可能導致代碼可讀性差、維護困難,這篇文章主要給大家介紹了關(guān)于Java使用枚舉替代if/else和switch-case語句的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • SpringCloud的JPA連接PostgreSql的教程

    SpringCloud的JPA連接PostgreSql的教程

    這篇文章主要介紹了SpringCloud的JPA接入PostgreSql 教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-06-06
  • 面試官:java ThreadLocal真的會造成內(nèi)存泄露嗎

    面試官:java ThreadLocal真的會造成內(nèi)存泄露嗎

    ThreadLocal,java面試過程中的“釘子戶”,在網(wǎng)上也充斥著各種有關(guān)ThreadLocal內(nèi)存泄露的問題,本文換個角度,先思考ThreadLocal體系中的ThreadLocalMap為什么要設計成弱引用
    2021-08-08
  • 高并發(fā)系統(tǒng)的限流詳解及實現(xiàn)

    高并發(fā)系統(tǒng)的限流詳解及實現(xiàn)

    這篇文章主要介紹了高并發(fā)系統(tǒng)的限流詳解及實現(xiàn),內(nèi)容詳細,小編覺得很不錯,這里分享給大家,供需要的朋友參考。隨小編一起看看吧。
    2017-11-11
  • Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    AutoGenerator是MyBatis-Plus的代碼生成器,通過AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個模塊的代碼,極大的提升了開發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡介和使用,需要的朋友可以參考下
    2023-05-05
  • Java多線程之鎖的強化學習

    Java多線程之鎖的強化學習

    Java多線程的鎖都是基于對象的,Java中的每一個對象都可以作為一個鎖。這篇文章主要來通過一下示例為大家強化一下鎖的相關(guān)知識的掌握,希望對大家有所幫助
    2023-02-02
  • 基于java實現(xiàn)的ECC加密算法示例

    基于java實現(xiàn)的ECC加密算法示例

    這篇文章主要介紹了基于java實現(xiàn)的ECC加密算法,簡單說明了ECC算法的概念、原理,并結(jié)合實例形式分析了java實現(xiàn)ECC加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-08-08
  • 詳解Java匿名內(nèi)部類

    詳解Java匿名內(nèi)部類

    這篇文章介紹了Java匿名內(nèi)部類的實現(xiàn),對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12

最新評論