最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

【關鍵考點】

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

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

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

【考題分析】

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

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

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

舉個通俗的例子:

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

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

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

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

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

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

              

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

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

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

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

       4.最終由Servlet2做出響應。

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

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

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

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

         

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

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

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

      3.最終由Servlet2做出響應。

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

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

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

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

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

總結

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

相關文章

  • Java中List根據map的某個key去重的代碼

    Java中List根據map的某個key去重的代碼

    今天小編就為大家分享一篇關于Java中List根據map的某個key去重的代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • IDEA中GitLab的使用詳解

    IDEA中GitLab的使用詳解

    這篇文章主要介紹了IDEA中GitLab的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • mybatis攔截器注冊初始化編寫示例及如何生效詳解

    mybatis攔截器注冊初始化編寫示例及如何生效詳解

    這篇文章主要為大家介紹了mybatis攔截器注冊初始化編寫示例及如何生效詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Spring Boot 日志概念及使用詳解

    Spring Boot 日志概念及使用詳解

    文章介紹了日志的重要性、日志格式、日志使用方法、日志級別、日志配置、日志持久化以及使用Lombok簡化日志輸出,感興趣的朋友一起看看吧
    2025-03-03
  • Spring Boot環(huán)境屬性占位符解析及類型轉換詳解

    Spring Boot環(huán)境屬性占位符解析及類型轉換詳解

    這篇文章主要給大家介紹了關于Spring Boot環(huán)境屬性占位符解析及類型轉換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • java基于正則表達式實現時間日期的常用判斷操作實例

    java基于正則表達式實現時間日期的常用判斷操作實例

    這篇文章主要介紹了java基于正則表達式實現時間日期的常用判斷操作,簡單說明了正則表達式常用元字符含義并結合實例形式分析了java基于正則表達式針對常用日期時間格式的判斷操作技巧,需要的朋友可以參考下
    2017-10-10
  • windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式

    windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式

    這篇文章主要介紹了windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Json字符串與Object、List、Map的互轉工具類

    Json字符串與Object、List、Map的互轉工具類

    今天小編就為大家分享一篇關于Json字符串與Object、List、Map的互轉工具類,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot測試時卡在Resolving Maven dependencies的問題

    SpringBoot測試時卡在Resolving Maven dependencies的問題

    這篇文章主要介紹了SpringBoot測試時卡在Resolving Maven dependencies的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JMM核心概念之Happens-before原則

    JMM核心概念之Happens-before原則

    關于Java并發(fā)的通信機制是基于共享內存實現的,線程之間共享程序的公共狀態(tài),通過寫-讀內存中的公共狀態(tài)進行隱式通信,這對程序員是透明的,我們需要理解其工作機制,以防止內存可見性問題,從而編寫出正確同步的代碼
    2021-06-06

最新評論

邯郸市| 罗平县| 电白县| 阿克陶县| 光山县| 武宁县| 始兴县| 甘南县| 新和县| 叙永县| 胶南市| 天津市| 石嘴山市| 怀仁县| 德钦县| 宜兴市| 旬阳县| 曲麻莱县| 吉首市| 东丰县| 灵山县| 枞阳县| 荥经县| 内丘县| 苍溪县| 汉沽区| 喀什市| 华阴市| 太谷县| 阜南县| 万全县| 肥西县| 蕉岭县| 平凉市| 开鲁县| 陕西省| 邯郸市| 来凤县| 聂荣县| 治多县| 资兴市|