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.mzph.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…