亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaWeb中請求轉發和請求重定向的區別有哪些

發布時間:2021-06-08 14:31:42 來源:億速云 閱讀:142 作者:小新 欄目:開發技術

小編給大家分享一下JavaWeb中請求轉發和請求重定向的區別有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

什么是請求轉發?

請求轉發是指,服務器收到請求后,從一次資源跳轉到另一個資源的操作。

JavaWeb中請求轉發和請求重定向的區別有哪些

請求轉發的特點

1.瀏覽器地址欄不會發生變化

2.他們一次請求,服務器完成轉發操作

3.共享Request域中的數據

4.可以轉發到WEB-INF目錄下

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

舉個例子:

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

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

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

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

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先獲取請求參數,看看servlet1需要做的事
        String username = request.getParameter("username");
        System.out.println(username);
        
        //.....部門1提供自己的服務
        
        //2.servlet1設置一個參數證明servlet1轉發的請求(部門1蓋一個章)
        request.setAttribute("key1", "servlet1");

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

JavaWeb中請求轉發和請求重定向的區別有哪些

注意

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

2.但是我們可以通過請求轉發來實現訪問servlet2;

思考:登錄功能和這種請求轉發方法類似,我們無法跳過登錄界面直接訪問系統,所有我們可以用這種請求轉發的方法來實現;

什么是請求重定向?

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

JavaWeb中請求轉發和請求重定向的區別有哪些

第一種方案

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

第二種方案(推薦使用)

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

請求重定向的特點

1.瀏覽器的地址欄會發生變化

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

3.兩個request對象不能共享域數據

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

5.可以訪問工程外的資源(比如說調轉的百度等等)

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

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

2.而我們在請求轉發或請求重定向之前,總會處理一些業務;此時,如果當本次業務是對數據庫,本地文件的增刪改操作時,就需要使用請求重定向;

為什么呢?

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

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

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

看完了這篇文章,相信你對“JavaWeb中請求轉發和請求重定向的區別有哪些”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜新| 龙游县| 镇原县| 泌阳县| 万荣县| 黑河市| 大化| 雅江县| 宁乡县| 崇礼县| 全州县| 禄劝| 于都县| 赤水市| 淳安县| 宜兴市| 汉寿县| 奇台县| 德钦县| 西华县| 桦甸市| 襄垣县| 沾益县| 龙里县| 柯坪县| 平乡县| 达尔| 乐业县| 淅川县| 崇礼县| 布尔津县| 汉沽区| 防城港市| 磴口县| 宜黄县| 阿拉善盟| 保靖县| 彭山县| 建阳市| 乐至县| 壶关县|