09_JavaWeb會話

1.會話

  • HTTP是一種無狀態協議;
HTTP協議對于發送過請求或者響應都不做持久化處理
  • 具體來說就是客戶端發送請求,服務器接收請求,但是服務器自身不會記錄每一條請求都是由哪一個客戶端發出的;

在這里插入圖片描述

  • 會話管理是通過Cookie和Session配合解決
客戶端第一次向服務器發請求,服務器會檢查客戶端是否攜帶cookie,
如果沒有,服務器會為當前客戶端創建session對象;
在響應的時候,服務器會向客戶端多響應一個信息叫做cookie
接下來的所有請求,只要cookie還在,客戶端就能通過cookie找到其session對象
后續一系列的請求響應組成了所謂的會話;
這一系列會話可以分析出用戶先前都做了什么事,什么操作
  • 學習此章節無非就是學習cookie和session相關的API

1.1 Cookie

  • cookie是服務器產生,存放在瀏覽器的一小份數據,后續服務器的所有請求都會帶著cookie到服務器去;

  • 1.創建cookie

在這里插入圖片描述

  • 注意:看上圖cookie構造器是鍵值對進行構造,因此創建需要傳入兩個參數

  • 2.將cookie裝入response響應報文

resp.addCookie(cookie1);
  • cookie可以創建多個,也可以裝入多個
//        1.創建cookieCookie cookie1 = new Cookie("keyA","valueA");Cookie cookie2 = new Cookie("keyB","valueB");Cookie cookie3 = new Cookie("keyC","valueC");//        2.將cookie裝入response對象resp.addCookie(cookie1);resp.addCookie(cookie2);resp.addCookie(cookie3);
注意index.jsp存在會干擾cookie session測試,因此創建web工程前先把其刪除;
  • 測試
創建Servlet類
寫入上面代碼得到下面所示

在這里插入圖片描述

  • 在這里插入圖片描述
    從ServletB中獲取Cookie
Cookie[] cookies = req.getCookies();
  • 如果cookie沒有的話,訪問時候一定要判斷,否則空指針異常,改進如下;

在這里插入圖片描述

  • 如果你沒有cookie,那么使用API獲取的東西就是null,而不是空數組

  • cookie分類

會話級cookie		(默認)
持久級cookie
  • 持久化cookie

    • 服務器明確設置了cookie時間
    • 客戶端瀏覽瀏覽器的時候cookie數據會被保存在硬盤上
    • cookie時間嚴格受 硬盤管控,不受瀏覽器關閉的影響
    • 如果關閉了,下次加載會繼續加載訪問時間
  • API設置Cookie時間

    cookie.setMaxAge(100);
    
  • Cookie的提交路徑設置

    • 這樣的好處:Req設置的cookie只會對ServletB進行提交
    • 也就是卡號為123的用戶去銀行,只能去三號柜臺使用卡
cookie1.setPath("/ServletB");

1.2 Session

  • Session對象產生之后,服務器會自動的向Response放入cookie,建就是JSESSIONID,值是session的鍵值對

  • 服務器每次對cookie進行讀取就能夠拿到JSESSIONID,進而獲取服務器對應原本的session對象;

在這里插入圖片描述

  • API相關
  • 獲取Session對象
HttpSession session= req.getSession();
req.getSession();	
如果沒有Session,那么此APi會創建一個session對象生成一個jsessionid
如果有;會通過jsession找到對應session對象

在這里插入圖片描述

一次會話之內多個請求使用同一個舊的session
請求不同會話請求與請求之間session不同
  • 獲取session
session.getId()
  • 判斷是否為新
session.isNew()
  • 往session里面放值
session.setAttribute("key","v")

api極為簡單,根據英文單詞即可知曉作者設計api的思路;見名知意

  • session持久化
默認	30min	如果超時,默認會自動清除掉;

30分鐘可以自定義

在這里插入圖片描述

  • 定義 cc的session時間直接調用api
ccSession.setMaxInactivaInterval(60);		//設置最大激活間隔時間單位s

1.3 三大域對象

1.3.1 域對象概述

域對象: 一些用于存儲數據傳遞數據的對象,傳遞數據不同的范圍,我們稱之為不同的域,不同的域對象代表不同的域,共享數據的范圍也不同

  • 請求域

在這里插入圖片描述

  • 會話域

在這里插入圖片描述

  • 應用域

在這里插入圖片描述

整個服務器的應用域有且僅有一個

在這里插入圖片描述

1.3.2域對象的使用

域對象的API

API功能
void setAttribute(String name,String value)向域對象中添加/修改數據
Object getAttribute(String name);從域對象中獲取數據
removeAttribute(String name);移除域對象中的數據
請求域是直接拿著req存放數據
會話域需要拿著req的session去獲取數據
應用域直接getServletContext()		//ServletContext()就是之前學的全局配置,之前的目的就是獲取應用域。

案例需求:

創建工程分別寫兩個ServletA,ServletB

ServletA分別向請求域,會話域,應用域放入數據;并讀取數據

并且將請求轉發給ServletB,使B進行數據獲取

  • ServletA域填寫數據獲取數據請求轉發
@WebServlet("/ServletA")
public class ServletA extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.向三大域分別存放數據req.setAttribute("K請求域","V請求域");HttpSession session = req.getSession();session.setAttribute("K會話域","V會話域");ServletContext servletContext = getServletContext();servletContext.setAttribute("K應用域","V應用域");//        2.分別獲取域 中數據
//        req.getAttribute("K請求域");
//        Enumeration<String> attributeNames = req.getAttributeNames();
//        while (attributeNames.hasMoreElements()){
//            System.out.println(attributeNames);
//            attributeNames.nextElement();
//        }System.out.println(req.getAttribute("K請求域"));System.out.println(session.getAttribute("K會話域"));System.out.println(servletContext.getAttribute("K應用域"));//        3.請求轉發req.getRequestDispatcher("/ServletB").forward(req,resp);}
}
  • ServletB讀取數據
@WebServlet("/ServletB")
public class ServletB extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();ServletContext servletContext = getServletContext();System.out.println(req.getAttribute("K請求域"));System.out.println(session.getAttribute("K會話域"));System.out.println(servletContext.getAttribute("K應用域"));}
}

在這里插入圖片描述

  • 請求域很小,會話結束,請求內容就丟失
  • 會話域,換一個瀏覽器訪問其Session就不同,即便是同一個客戶端進行訪問,也不行
  • 應用域是全局的

1.3.3 小結

  • 請求轉發時,請求域可以傳遞數據請求域內一般放本次請求業務有關的數據,如:查詢到的所有的部門信息
  • 同一個會話內,不用請求轉發,會話域可以傳遞數據會話域內一般放本次會話的客戶端有關的數據,如:當前客戶端登錄的用戶
  • 同一個APP內,不同的客戶端,應用域可以傳遞數據應用域內一般放本程序應用有關的數據 如:Spring框架的IOC容器

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

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

相關文章

【排序】插入排序,希爾排序

前面我們講述了冒泡排序和選擇排序&#xff0c;我們本章講的排序方法是插入排序&#xff0c;插入排序是希爾排序實現的基礎函數&#xff0c;大家一定要好好理解插入排序的邏輯&#xff0c;這樣才能在后面學習希爾排序的時候&#xff0c;更容易的去理解&#xff0c;我們直接開始…

關于無法通過腳本啟動Kafka集群的解決辦法

啟動Kafka集群時&#xff0c;需要在每臺個節點上啟動啟動服務&#xff0c;比較麻煩&#xff0c;通過寫了以下腳本來進行啟停&#xff1b;發現能正常使用停止功能&#xff0c;不能正常啟動Kafka&#xff1b; Kafka啟停腳本&#xff1a; ## 以防不能通過shell腳本啟動Kafka服務…

富格林:揭露黑幕平臺保障安全

富格林指出&#xff0c;很多黑幕平臺都會將自己包裝得光鮮亮麗后&#xff0c;再出來誘惑投資者&#xff0c;使得投資者資金安全得不到保障&#xff0c;有苦說不出。富格林表示&#xff0c;黑幕平臺的套路其實是非常常見的&#xff0c;只要投資者熟知并能夠分辨出&#xff0c;就…

C盤擴容——只能刪除C盤右邊的磁盤對C盤進行擴展

winR彈出命令框 輸入&#xff1a;compmgmt.msc 進入磁盤管理頁面 注意&#xff1a;被刪除盤如果有重要數據信息&#xff0c;請備份。 或者刪除之前轉移至其他盤&#xff0c;否則刪除之后&#xff0c;則無法找回。 尤其是安裝的軟件。 規范安裝目錄十分重要。 將C盤右邊的磁盤&a…

最全 Inno Setup 教程-[FILE] Flag參數

【1】此參數是一個附加選項的集合。可以使用空格將多個選項分隔開。 【2】支持以下選項&#xff1a; 32位 當在“Source”和“DestDir”參數中使用{sys}常量時&#xff0c;將該常量映射到32位系統目錄。將“regserver”和“regtypelib”標志設置為將文件視為32位&#xff0c;…

安防綜合管理系統EasyCVR視頻匯聚平臺GA/T 1400協議中的關鍵消息交互示例

在當今的信息化時代&#xff0c;公共安全防范日益成為保障社會和諧穩定的關鍵。視頻監控系統作為現代安全防范的重要手段&#xff0c;正不斷在公安、交通、城市管理等領域發揮著越來越重要的作用。而GA/T 1400協議視圖庫&#xff0c;作為公安視頻圖像信息應用系統的標準&#x…

Vue3 子組件訪問父組件的方法 - 父組件訪問子組件的屬性或方法 - 子組件修改父組件的值

一。子組件訪問父組件的方法 //父組件 <DialogEditing close-dialog"handleClose" /> const handleClose () > {};//子組件 const emit defineEmits(["closeDialog"]); const close () > {emit("closeDialog"); // 使用 };二。父…

健身日記之倒立俯臥撐學習——起始日2024.6.4

文章目錄 前言 自我介紹 昔日計劃 新目標計劃 瓶頸突破嘗試 參考視頻及文章 前言 有輕微健身基礎&#xff0c;正式接觸街健五大神技&#xff0c;立志在兩年內解鎖全部&#xff0c;將有機會的進行日常訓練和目標肌群鍛煉&#xff0c;這里向大家展示我的計劃和安排&#xf…

opencv-python(五)

opencv的顏色通道中順序是B&#xff0c;G&#xff0c;R。 圖像屬性 import cv2img cv2.imread(jk.jpg) print(fshape{img.shape}) print(fsize{img.size}) print(fdtype{img.dtype}) shape&#xff1a;圖像像素的行&#xff0c;列&#xff0c;通道 size&#xff1a;行數 X …

YonSuite收款通,助力企業618更快收款

隨著電商節日“618”的臨近&#xff0c;各大企業紛紛摩拳擦掌&#xff0c;準備在這場年中大促中大展身手。然而&#xff0c;隨著銷售額的激增&#xff0c;收款管理問題也愈發凸顯&#xff0c;成為制約企業快速發展的重要瓶頸。在這個關鍵時刻&#xff0c;YonSuite收款通憑借其卓…

Python實現登錄到遠程主機,然后在遠程主機上繼續連接遠程主機

實現功能 登錄到遠程主機&#xff0c;然后在遠程主機上繼續連接遠程主機&#xff0c;執行命令。 import paramiko import time# 第二個遠程主機的連接信息&#xff08;在第一個遠程主機上執行SSH連接時使用&#xff09; second_remote_host 192.168.xx.xxx # 創建SSH客…

通過命令行將tar壓縮文件解壓縮到指定目錄|Linux

要將all.tar文件解壓縮到指定目錄下&#xff0c;你可以使用Linux命令行中的tar命令。以下是具體步驟&#xff1a; 打開終端&#xff08;Terminal&#xff09;。 使用cd命令切換到你想要解壓縮文件的目標目錄。例如&#xff1a; cd /path/to/your/directory將/path/to/your/dir…

echarts圖例formatter配置添加百分比

echarts圖例如何添加百分比 const pieChart async () > {const myChart echarts.init(piepic.value)const piedata await getPieData(); // 等待數據返回myChart.setOption({title: {},grid: {},tooltip: {trigger: item,},legend: {top: middle,align:left,icon: circl…

都可以寫好后端接口

在后端工程師的日常開發中&#xff0c;我們都曾想過 怎么設計一個良好的接口呢&#xff1f;需要考慮的點有哪些。來 給您。 1、請求參數校驗 這個是大家都能想到的&#xff0c;也是一個良好的接口必備的前提條件&#xff0c;通過入參的校驗我們可以過濾掉許多無效的請求&…

零基礎學Java第二十七天之前端-HTML5詳解

前端-HTML5詳解 一、概述 HTML5是HTML的第五個版本&#xff0c;它對HTML進行了許多改進和擴展&#xff0c;使得網頁開發更加豐富和便利。HTML5是Web標準的重要組成部分&#xff0c;旨在提高瀏覽器兼容性&#xff0c;統一網頁開發標準。HTML5不僅包括了HTML的基本元素和標簽&am…

前端js解析websocket推送的gzip壓縮json的Blob數據

主要依賴插件pako https://www.npmjs.com/package/pako 1、安裝 npm install pako 2、使用&#xff0c; pako.inflate(reader.result, {to: "string"}) 解壓后的string 對象&#xff0c;需要JSON.parse轉成json this.ws.onmessage (evt) > {console.log("…

vue使用html2canvas截圖下載時,存在svg或者img時截圖不全的解決辦法

使用html2canvas進行div截圖時&#xff0c;存在svg和img的解決辦法 寫在前面&#xff1a;vue使用html2canvas截圖時&#xff0c;存在svg或者img時截圖時空白&#xff0c;或者不全解決辦法如下第一步&#xff0c;svg或者img先轉base64第二步&#xff0c;將轉換后的base64設置為新…

電源小白入門學習10——浪涌、防浪涌器件、浪涌保護芯片

浪涌、防浪涌器件、浪涌保護芯片 浪涌浪涌保護器件的分類與原理保險絲TVS二極管新防護電路 浪涌 浪涌&#xff0c;相信不少學習過電子的同學或多或少都通過這個詞&#xff0c;但是到底什么是浪涌呢&#xff0c;GPT給我的答案是這樣的&#xff1a; 浪涌&#xff0c;也稱為瞬態…

【雜記-IDS入侵檢測系統、IPS入侵防御系統】

一、IDS概述、分類 IDS概述 IDS&#xff0c;intrusion detection system&#xff0c;入侵檢測系統&#xff0c;其對網絡傳輸進行即時監視&#xff0c;在發現可疑傳輸時發出警報或者采取主動反應措施的網絡安全設備&#xff0c;是一種積極主動的安全防護技術。與防火墻不同的是…

【深度學習】【機器學習】支持向量機,網絡入侵檢測,KDD數據集

文章目錄 環境加載數據歸一化數據訓練模型用測試數據集給出評估指標準確率召回率預測某個輸入數據隨便取一行數據加載訓練好的SVM支持向量機模型并預測 全部數據和代碼下載 環境 之前介紹過用深度學習做入侵檢測&#xff0c;這篇用向量機。 環境Python3.10 requirements.txt…