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

JavaWeb中請求轉(zhuǎn)發(fā)和請求重定向的區(qū)別以及使用

 更新時間:2021年06月08日 11:28:52   作者:阿已  
今天帶大家學(xué)習(xí)JavaWeb的相關(guān)知識,文章圍繞著JavaWeb中請求轉(zhuǎn)發(fā)和請求重定向的區(qū)別以及使用展開,文中有非常詳細的介紹,需要的朋友可以參考下

什么是請求轉(zhuǎn)發(fā)?

請求轉(zhuǎn)發(fā)是指,服務(wù)器收到請求后,從一次資源跳轉(zhuǎn)到另一個資源的操作。

在這里插入圖片描述

請求轉(zhuǎn)發(fā)的特點

1.瀏覽器地址欄不會發(fā)生變化

2.他們一次請求,服務(wù)器完成轉(zhuǎn)發(fā)操作

3.共享Request域中的數(shù)據(jù)

4.可以轉(zhuǎn)發(fā)到WEB-INF目錄下

5.不可以訪問工程以外的資源

舉個例子:

1.一個公司有多個部門,其中部門1(Servlet1)向客戶提供了自己能夠提供的服務(wù),但是還有一部分服務(wù)自己提供不了,需要其他部門的服務(wù);

2.所以部門1(Servlet1)將客戶的文件蓋一個章,證明部門1已經(jīng)提供了服務(wù),然后將其轉(zhuǎn)交(請求轉(zhuǎn)發(fā))到部門2(Servlet2);

3.部門2檢查部門1是否蓋過章了,如果蓋過章就繼續(xù)向客戶提供服務(wù)…;

4.直到所有服務(wù)都處理完,將客戶需要的數(shù)據(jù)提供給客戶(即,將數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端**[轉(zhuǎn)發(fā)到某個頁面]**);

package servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet1 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //1.servlet1先獲取請求參數(shù),看看servlet1需要做的事
        String username = request.getParameter("username");
        System.out.println(username);
        
        //.....部門1提供自己的服務(wù)
        
        //2.servlet1設(shè)置一個參數(shù)證明servlet1轉(zhuǎn)發(fā)的請求(部門1蓋一個章)
        request.setAttribute("key1", "servlet1");

        //3.查詢servlet2的路徑,(部門1將其轉(zhuǎn)交給部門1)
        RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
        
        //4.把請求和響應(yīng)轉(zhuǎn)發(fā)給servlet2
        dispatcher.forward(request, response);
    }
}
package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet2 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //部門2查看客戶需要的服務(wù)
        System.out.println("Servlet2查看參數(shù): "+request.getParameter("username"));
        //部門2查看部門1有沒有蓋章,判斷是否繼續(xù)服務(wù)
        System.out.println("Servlet2查看是否有Servlet1的證明: "+request.getAttribute("key1"));
        //部門2處理完自己的服務(wù),
        System.out.println("Servlet處理自己的業(yè)務(wù)");
    }
}

在這里插入圖片描述

注意

1.這時候如果我們將Servlet2放在WEB_INF下,那么我們就無法直接訪問servlet2了;

2.但是我們可以通過請求轉(zhuǎn)發(fā)來實現(xiàn)訪問servlet2;

思考:登錄功能和這種請求轉(zhuǎn)發(fā)方法類似,我們無法跳過登錄界面直接訪問系統(tǒng),所有我們可以用這種請求轉(zhuǎn)發(fā)的方法來實現(xiàn);

什么是請求重定向?

請求重定向:是指客戶端發(fā)送請求,然后服務(wù)器告訴客戶端,我給你一個地址,你去新的地址訪問(之前的地址可能已經(jīng)被廢棄,或者之前的地址[Servlet]無法滿足需求);

在這里插入圖片描述

第一種方案

// 設(shè)置響應(yīng)狀態(tài)碼 302 ,表示重定向,(已搬遷) 
resp.setStatus(302); 
// 設(shè)置響應(yīng)頭,說明 新的地址在哪里 
resp.setHeader("Location", http://localhost:8080);

第二種方案(推薦使用)

resp.sendRedirect(http://localhost:8080);

請求重定向的特點

1.瀏覽器的地址欄會發(fā)生變化

2.瀏覽器發(fā)送了兩次請求,而不是像調(diào)用request的getRequestDispatcher("/a/b/c.html").forward(request, response)方法實現(xiàn)的;所以一共創(chuàng)建了兩個request對象

3.兩個request對象不能共享域數(shù)據(jù)

4.重定向不能訪問WEB-INF里的資源,因為兩次請求都是客戶端發(fā)起的,客戶端無法直接訪問到WEB-INF里的資源

5.可以訪問工程外的資源(比如說調(diào)轉(zhuǎn)的百度等等)

什么時候使用請求重定向?

1.瀏覽會記錄最后一次請求的所有數(shù)據(jù),客戶端可以通過刷新頁面的方法,重新發(fā)起最后一次請求;

2.而我們在請求轉(zhuǎn)發(fā)或請求重定向之前,總會處理一些業(yè)務(wù);此時,如果當(dāng)本次業(yè)務(wù)是對數(shù)據(jù)庫,本地文件的增刪改操作時,就需要使用請求重定向;

為什么呢?

因為,這時如果我們使用請求轉(zhuǎn)發(fā)(整個處理業(yè)務(wù)過程就只是一次請求),瀏覽就會記錄我們這次請求(操作數(shù)據(jù)庫),一旦客戶端刷新頁面,就會執(zhí)行(操作數(shù)據(jù)庫)的請求,這時很嚴(yán)重的bug,我們要避免,所有就要用到請求重定向;

1.因為我們每次操作完數(shù)據(jù)庫,都會跳轉(zhuǎn)到首頁,或者數(shù)據(jù)展示的頁面,所以這時我們使用請求重定向跳轉(zhuǎn)到這個頁面(實際是跳轉(zhuǎn)到某個Servlet查詢數(shù)據(jù)庫中的記錄,這個Servlet再跳轉(zhuǎn)到數(shù)據(jù)展示的頁面);

2.此時瀏覽器記錄的最后一次請求就是查詢數(shù)據(jù)庫中記錄的請求了,這時我們刷新頁面,也只是查詢數(shù)據(jù),不再是對數(shù)據(jù)庫的增刪改了;

總結(jié):當(dāng)我們修改數(shù)據(jù)庫中的數(shù)據(jù)的之后,就需要使用請求重定向來避免上述的問題了;

到此這篇關(guān)于JavaWeb中請求轉(zhuǎn)發(fā)和請求重定向的區(qū)別以及使用的文章就介紹到這了,更多相關(guān)請求轉(zhuǎn)發(fā)和請求重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java仿百度假分頁代碼實現(xiàn)的詳解

    java仿百度假分頁代碼實現(xiàn)的詳解

    這篇文章主要介紹了java仿百度假分頁代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解Java實踐之適配器模式

    詳解Java實踐之適配器模式

    在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中
    2021-06-06
  • 如何利用Java遞歸解決“九連環(huán)”公式

    如何利用Java遞歸解決“九連環(huán)”公式

    這篇文章主要給大家介紹了關(guān)于如何利用Java遞歸解決“九連環(huán)”公式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Spring在代碼中獲取bean的方法小結(jié)

    Spring在代碼中獲取bean的方法小結(jié)

    在工作中有時候我們需要在非spring依賴注入或管理的類中獲取service、dao等bean對象,這時候用@Autowired和@Resource顯然是不行的,那么下面這篇文章就給大家了整理幾種獲取bean的方式,對大家的學(xué)習(xí)和工作具有一定的參考借鑒,下面來一起看看吧。
    2016-11-11
  • Alibaba?Nacos配置中心動態(tài)感知原理示例解析

    Alibaba?Nacos配置中心動態(tài)感知原理示例解析

    這篇文章主要介紹了Alibaba?Nacos配置中心動態(tài)感知原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • springBoot2.6.2自動裝配之注解源碼解析

    springBoot2.6.2自動裝配之注解源碼解析

    對于springboot個人認為它就是整合了各種組件,然后提供對應(yīng)的自動裝配和啟動器(starter),基于這個流程去實現(xiàn)一個定義的裝配組件,下面這篇文章主要給大家介紹了關(guān)于springBoot2.6.2自動裝配之注解源碼解析的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Java Proxy機制詳細解讀

    Java Proxy機制詳細解讀

    這篇文章主要介紹了Java Proxy機制詳細解讀,還是非常不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-10-10
  • MyBatis Generator 自定義生成注釋的方法

    MyBatis Generator 自定義生成注釋的方法

    這篇文章主要介紹了MyBatis Generator 自定義生成注釋的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 詳解Spring?延遲初始化遇到的問題

    詳解Spring?延遲初始化遇到的問題

    這篇文章主要介紹了我們在使用Spring延遲初始化容易遇到的問題,文中有詳細的代碼示例,具有一定的參考價值,需要的可以借鑒一下
    2023-05-05

最新評論

泸定县| 萨嘎县| 略阳县| 镇康县| 灵台县| 彭泽县| 黄平县| 福安市| 黄龙县| 敖汉旗| 克山县| 浦县| 浏阳市| 米林县| 明溪县| 揭东县| 新邵县| 嘉鱼县| 霍州市| 土默特左旗| 祥云县| 高要市| 高邮市| 明光市| 修武县| 西平县| 正蓝旗| 工布江达县| 象山县| 师宗县| 友谊县| 常熟市| 白朗县| 龙岩市| 墨玉县| 锦州市| 嘉定区| 沈丘县| 平泉县| 济源市| 当雄县|