學習Java第64天,請求轉發和響應重定向

請求轉發和響應重定向

概述

什么是請求轉發和響應重定向

  • 請求轉發和響應重定向是web應用中間接訪問項目資源的兩種手段,也是Servlet控制頁面跳轉的兩種手段

  • 請求轉發通過HttpServletRequest實現,響應重定向通過HttpServletResponse實現

  • 請求轉發生活舉例: 張三找李四借錢,李四沒有,李四找王五,讓王五借給張三

  • 響應重定向生活舉例:張三找李四借錢,李四沒有,李四讓張三去找王五,張三自己再去找王五借錢

請求轉發

請求轉發特點(背誦)

  • 請求轉發通過HttpServletRequest對象獲取請求轉發器實現

  • 請求轉發是服務器內部的行為,對客戶端是屏蔽的

  • 客戶端只發送了一次請求,客戶端地址欄不變

  • 服務端只產生了一對請求和響應對象,這一對請求和響應對象會繼續傳遞給下一個資源

  • 因為全程只有一個HttpServletRequset對象,所以請求參數可以傳遞,請求域中的數據也可以傳遞

  • 請求轉發可以轉發給其他Servlet動態資源,也可以轉發給一些靜態資源以實現頁面跳轉

  • 請求轉發可以轉發給WEB-INF下受保護的資源

  • 請求轉發不能轉發到本項目以外的外部資源

請求轉發測試代碼 ?

ServletA

@WebServlet("/servletA")
public class ServletA extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//  獲取請求轉發器//  轉發給servlet  okRequestDispatcher  requestDispatcher = req.getRequestDispatcher("servletB");//  轉發給一個視圖資源 ok//RequestDispatcher requestDispatcher = req.getRequestDispatcher("welcome.html");//  轉發給WEB-INF下的資源  ok//RequestDispatcher requestDispatcher = req.getRequestDispatcher("WEB-INF/views/view1.html");//  轉發給外部資源   no//RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.atguigu.com");//  獲取請求參數String username = req.getParameter("username");System.out.println(username);//  向請求域中添加數據req.setAttribute("reqKey","requestMessage");//  做出轉發動作requestDispatcher.forward(req,resp);}
}

ServletB

@WebServlet("/servletB")
public class ServletB extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取請求參數String username = req.getParameter("username");System.out.println(username);// 獲取請求域中的數據String reqMessage = (String)req.getAttribute("reqKey");System.out.println(reqMessage);// 做出響應resp.getWriter().write("servletB response");        }
}

響應重定向

響應重定向運行邏輯圖

響應重定向特點(背誦)

  • 響應重定向通過HttpServletResponse對象的sendRedirect方法實現

  • 響應重定向是服務端通過302響應碼和路徑,告訴客戶端自己去找其他資源,是在服務端提示下的,客戶端的行為

  • 客戶端至少發送了兩次請求,客戶端地址欄是要變化的

  • 服務端產生了多對請求和響應對象,且請求和響應對象不會傳遞給下一個資源

  • 因為全程產生了多個HttpServletRequset對象,所以請求參數不可以傳遞,請求域中的數據也不可以傳遞

  • 重定向可以是其他Servlet動態資源,也可以是一些靜態資源以實現頁面跳轉

  • 重定向不可以到給WEB-INF下受保護的資源

  • 重定向可以到本項目以外的外部資源

響應重定向測試代碼

?ServletA


@WebServlet("/servletA")
public class ServletA extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//  獲取請求參數String username = req.getParameter("username");System.out.println(username);//  向請求域中添加數據req.setAttribute("reqKey","requestMessage");//  響應重定向// 重定向到servlet動態資源 OKresp.sendRedirect("servletB");// 重定向到視圖靜態資源 OK//resp.sendRedirect("welcome.html");// 重定向到WEB-INF下的資源 NO//resp.sendRedirect("WEB-INF/views/view1");// 重定向到外部資源//resp.sendRedirect("http://www.atguigu.com");}
}

?ServletB

@WebServlet("/servletB")
public class ServletB extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取請求參數String username = req.getParameter("username");System.out.println(username);// 獲取請求域中的數據String reqMessage = (String)req.getAttribute("reqKey");System.out.println(reqMessage);// 做出響應resp.getWriter().write("servletB response");}
}

打開瀏覽器,輸入以下url測試

http://localhost:8080/web03_war_exploded/servletA?username=atguigu

PS:來源尚硅谷

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能原理復習--搜索策略(二)

文章目錄 上一篇啟發式搜索與或圖搜索博弈下一篇 上一篇 人工智能原理復習–搜索策略(一) 啟發式搜索 提高一般圖搜索效率的關鍵是優化OPEN表中節點的排序方式 最理想的情況是每次排序OPEN表表首n總在解答路徑上 全局排序–對OPEN表中的所有節點進行…

vue實例事件

實例方法 / 事件 vm.$on 監聽當前實例上的自定義事件。事件可以由 vm.$emit 觸發。回調函數會接收所有傳入事件觸發函數的額外參數。 vm.$on(test, function (msg) {console.log(msg) }) vm.$emit(test, hi) // > "hi"vm.$once( event, callback ) 監聽一個自定義…

Vue筆記(二)基本語法

基本語法 <style> table {border-collapse: collapse;margin:0 auto; } strong {color: rgb(235, 51, 100); }td, th {padding-left: 6px; } table tr td:first-child {width:150px } table tr td:nth-child(2) {width:300px } </style> <template><tabl…

mysql面試題——MVCC

一&#xff1a;什么是MVCC&#xff1f; 多版本并發控制&#xff0c;更好的方式去處理讀-寫沖突&#xff0c;就是為了查詢一些正在被另一個事務更新的行&#xff0c;并且可以看到它們被更新之前的值&#xff0c;這樣在做查詢的時候就不用等待另一個事務釋放鎖。 二&#xff1a…

萬界星空科技mes系統中看板管理

我們很多企業現在都有大屏&#xff0c;那到底萬界星空科技低代碼云mes系統管理中看板管理有什么作用&#xff1f;我總結了幾條: 1.提高車間的生產效率 2.有效的監控設備運行狀況 3.控制生產線運行 4.增加和改善用戶體驗 5.提高工作效率和工作安全性

Zabbix監控騰訊云VPC

一、簡介 私有網絡&#xff08;Virtual Private Cloud&#xff0c;VPC&#xff09;是騰訊云上一塊由用戶自定義的邏輯隔離網絡空間&#xff0c;為云服務器、云數據庫等資源提供安全可控的網絡環境。通過構建邏輯隔離的、用戶自定義配置的網絡空間&#xff0c;用戶能夠提升其云…

vue組件插槽

組件的插槽 組件本身就是一個容器&#xff0c;也可以是一個vue對象&#xff0c;也是一個虛擬DOM 普通插槽 組件本身是一個容器&#xff0c;這個容器本身是空的&#xff0c;當我們把需要封裝的html結構裝進去之后&#xff0c;我們可以認為這個容器被塞滿了&#xff0c;那就意…

WIN11家庭中文版使用ENSP+VirtualBox啟動AR失敗40錯誤+未完全關閉hyper-V,以及安裝VirtualBox兼容性問題

使用版本&#xff1a;eNSP 1.3.00.100VirtualBox 5.2.44WinPcap_4_1_3Wireshark最新版。 win11系統最好按照上述版本安裝&#xff0c;VirtualBox不要安裝更高版本&#xff0c;否則可能出現不兼容情況&#xff0c;Wireshark版本要求還好&#xff0c;安裝順序是VirtualBox 5.2.4…

python+pytest接口自動化之參數關聯

什么是參數關聯&#xff1f; 參數關聯&#xff0c;也叫接口關聯&#xff0c;即接口之間存在參數的聯系或依賴。在完成某一功能業務時&#xff0c;有時需要按順序請求多個接口&#xff0c;此時在某些接口之間可能會存在關聯關系。比如&#xff1a;B接口的某個或某些請求參數是通…

如何利用人工智能+物聯網技術實現自動化設備生產

隨著科技的發展與行業競爭的日益激烈&#xff0c;制造業也逐漸走向智能化發展。制造業的改革是利用物聯網技術和自動化設備&#xff0c;實現生產線的智能化和自適應生產&#xff0c;優化生產流程&#xff0c;提高生產效率和質量&#xff0c;為企業創造更大的價值。 方案概述 智…

Gif表情包怎么用圖片制作?一招簡單易上手

很多朋友對于gif動圖的名字不是很熟悉&#xff0c;但是對于“gif表情包”一定很熟悉吧&#xff01;在日常網絡聊天中經常能見到其的身影&#xff0c;能夠調節聊天的氣氛。想要制作gif表情包可以使用gif動圖在線制作&#xff08;https://www.gif.cn/&#xff09;網站-GIF中文網&…

【C語言期末】題目+解析

文章目錄 題目1.下面哪個不是C語言的基本數據類型&#xff1f;&#xff08; B &#xff09;2.C語言的標識符應以字母或&#xff08; A &#xff09;開頭。3.如果需要在C程序里調用標準函數庫中的printf函數&#xff0c;則應該在程序的開頭包含哪個頭文件&#xff1f;&#xff0…

學習Linux(2)-學習Linux命令

Linux目錄結構 Linux目錄結構-菜鳥教程 /bin&#xff1a;bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot&#xff1a;這里存放的是啟動 Linux 時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件。 /dev &#xff1a;dev 是 De…

TensorFlow 常用代碼

TensorFlow 是由 Google 開發的一個用于數值計算的開源軟件庫&#xff0c;主要用于構建和訓練機器學習模型。它的核心是使用數據流圖來描述計算任務。數據流圖是由節點和邊組成的有向圖&#xff0c;每個節點表示一個計算任務&#xff0c;每條邊表示數據傳輸。 TensorFlow 支持…

Dockerfile文件

什么是dockerfile? Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Docke…

C語言-字符串操作函數-附加使用方式

文章目錄 前言字符串復制-strcpy字符串復制&#xff08;按照位數&#xff09;-strncpy字符串比較-strcmp字符串比較(按照位數)-strncmp不區分大小寫的字符串比較-strcasecmp不區分大小寫的比較(前n位)-strncasecmp字符串按照格式寫入-sprintf字符串按照格式和個數寫入-snprintf…

JUC包(面試常問)

1. Callable接口 類似于Runnable接口&#xff0c;Runnable描述的任務&#xff0c;不帶返回值&#xff1b;Callable描述的任務帶返回值。 public class Test {//創建線程&#xff0c;計算12...1000public static void main(String[] args) throws ExecutionException, Interru…

js/jQuery常見操作 之各種語法例子(包括jQuery中常見的與索引相關的選擇器)

js/jQuery常見操作 之各種語法例子&#xff08;包括jQuery中常見的與索引相關的選擇器&#xff09; 1. 操作table常見的1.1 動態給table添加title&#xff08;指定td&#xff09;1.1.1 給td動態添加title&#xff08;含&#xff1a;獲取tr的第幾個td&#xff09;1.1.2 動態加工…

KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(23)

接前一篇文章:KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(22) 上一回講解了i915_gem_object_lookup_rcu函數的第1個參數struct drm_file *file,本回講解其第2個參數u32 handle。 (2)參數u32 handle 說起來,handle要比struct drm_file *file參數好理解多了…

怎么更改android的包名,使其可以變成另外一個app

在 Android 中更改應用的包名并不是一項簡單的任務&#xff0c;因為包名在應用的整個代碼和配置文件中都被廣泛使用。但是&#xff0c;你可以通過以下步驟來更改應用的包名&#xff1a; 注意&#xff1a;在更改包名之前&#xff0c;請確保備份你的項目&#xff0c;以防發生意外…