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

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

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

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

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

在這里插入圖片描述

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

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

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

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

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

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

舉個例子:

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

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

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

4.直到所有服務都處理完,將客戶需要的數(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提供自己的服務
        
        //2.servlet1設置一個參數(shù)證明servlet1轉(zhuǎn)發(fā)的請求(部門1蓋一個章)
        request.setAttribute("key1", "servlet1");

        //3.查詢servlet2的路徑,(部門1將其轉(zhuǎn)交給部門1)
        RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
        
        //4.把請求和響應轉(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查看客戶需要的服務
        System.out.println("Servlet2查看參數(shù): "+request.getParameter("username"));
        //部門2查看部門1有沒有蓋章,判斷是否繼續(xù)服務
        System.out.println("Servlet2查看是否有Servlet1的證明: "+request.getAttribute("key1"));
        //部門2處理完自己的服務,
        System.out.println("Servlet處理自己的業(yè)務");
    }
}

在這里插入圖片描述

注意

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

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

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

什么是請求重定向?

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

在這里插入圖片描述

第一種方案

// 設置響應狀態(tài)碼 302 ,表示重定向,(已搬遷) 
resp.setStatus(302); 
// 設置響應頭,說明 新的地址在哪里 
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è)務;此時,如果當本次業(yè)務是對數(shù)據(jù)庫,本地文件的增刪改操作時,就需要使用請求重定向;

為什么呢?

因為,這時如果我們使用請求轉(zhuǎn)發(fā)(整個處理業(yè)務過程就只是一次請求),瀏覽就會記錄我們這次請求(操作數(shù)據(jù)庫),一旦客戶端刷新頁面,就會執(zhí)行(操作數(shù)據(jù)庫)的請求,這時很嚴重的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é):當我們修改數(shù)據(jù)庫中的數(shù)據(jù)的之后,就需要使用請求重定向來避免上述的問題了;

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

相關文章

  • Java中JDBC的使用教程詳解

    Java中JDBC的使用教程詳解

    Java語言操作數(shù)據(jù)庫?JDBC本質(zhì):其實是官方(sun公司)定義的一套操作所有關系型數(shù)據(jù)庫的規(guī)則,即接口。本文講解了JDBC的使用方法,需要的可以參考一下
    2022-06-06
  • gRPC實踐之proto及Maven插件概念及使用詳解

    gRPC實踐之proto及Maven插件概念及使用詳解

    這篇文章主要為大家介紹了gRPC實踐之proto及Maven插件概念及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringBoot詳細分析自動裝配原理并實現(xiàn)starter

    SpringBoot詳細分析自動裝配原理并實現(xiàn)starter

    相對于傳統(tǒng)意義上的Spring項目,SpringBoot具有開箱即用,簡化配置,內(nèi)置Tomcat等等等等一系列的特點。在這些特點中,最重要的兩條就是約定優(yōu)于配置和自動裝配
    2022-07-07
  • 2021年最新Redis面試題匯總(1)

    2021年最新Redis面試題匯總(1)

    在程序員面試過程中redis相關的知識是常被問到的話題。這篇文章主要介紹了幾道Redis面試題,整理一下分享給大家,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 啟用設置org.slf4j.Logger打印并輸出日志方式

    啟用設置org.slf4j.Logger打印并輸出日志方式

    這篇文章主要介紹了啟用設置org.slf4j.Logger打印并輸出日志方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 學習Java之IO流中有哪些復雜的API

    學習Java之IO流中有哪些復雜的API

    這篇文章我們要先對IO流的API有個基本的認知,因為IO流的類和方法太多了,我們不得不專門學習一下,所以本文就給大家詳細的講講Java?IO流中復雜的API,需要的朋友可以參考下
    2023-09-09
  • Java基于NIO實現(xiàn)群聊系統(tǒng)

    Java基于NIO實現(xiàn)群聊系統(tǒng)

    這篇文章主要為大家詳細介紹了Java基于NIO實現(xiàn)群聊系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java 守護線程_動力節(jié)點Java學院整理

    Java 守護線程_動力節(jié)點Java學院整理

    Java語言機制是構建在JVM的基礎之上的,意思是Java平臺把操作系統(tǒng)的底層給屏蔽起來,所以它可以在它自己的虛擬的平臺里面構造出對自己有利的機制,而語言或者說平臺的設計者多多少少是收到Unix思想的影響,而守護線程機制又是對JVM這樣的平臺湊合,于是守護線程應運而生
    2017-05-05
  • HashMap底層實現(xiàn)原理詳解

    HashMap底層實現(xiàn)原理詳解

    這篇文章主要介紹了HashMap底層實現(xiàn)原理詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 基于spring AOP @Around @Before @After的區(qū)別說明

    基于spring AOP @Around @Before @After的區(qū)別說明

    這篇文章主要介紹了基于spring AOP @Around @Before @After的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論