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服务…

C盘扩容——只能删除C盘右边的磁盘对C盘进行扩展

winR弹出命令框 输入&#xff1a;compmgmt.msc 进入磁盘管理页面 注意&#xff1a;被删除盘如果有重要数据信息&#xff0c;请备份。 或者删除之前转移至其他盘&#xff0c;否则删除之后&#xff0c;则无法找回。 尤其是安装的软件。 规范安装目录十分重要。 将C盘右边的磁盘&a…

安防综合管理系统EasyCVR视频汇聚平台GA/T 1400协议中的关键消息交互示例

在当今的信息化时代&#xff0c;公共安全防范日益成为保障社会和谐稳定的关键。视频监控系统作为现代安全防范的重要手段&#xff0c;正不断在公安、交通、城市管理等领域发挥着越来越重要的作用。而GA/T 1400协议视图库&#xff0c;作为公安视频图像信息应用系统的标准&#x…

健身日记之倒立俯卧撑学习——起始日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收款通凭借其卓…

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…

电源小白入门学习10——浪涌、防浪涌器件、浪涌保护芯片

浪涌、防浪涌器件、浪涌保护芯片 浪涌浪涌保护器件的分类与原理保险丝TVS二极管新防护电路 浪涌 浪涌&#xff0c;相信不少学习过电子的同学或多或少都通过这个词&#xff0c;但是到底什么是浪涌呢&#xff0c;GPT给我的答案是这样的&#xff1a; 浪涌&#xff0c;也称为瞬态…

【深度学习】【机器学习】支持向量机,网络入侵检测,KDD数据集

文章目录 环境加载数据归一化数据训练模型用测试数据集给出评估指标准确率召回率预测某个输入数据随便取一行数据加载训练好的SVM支持向量机模型并预测 全部数据和代码下载 环境 之前介绍过用深度学习做入侵检测&#xff0c;这篇用向量机。 环境Python3.10 requirements.txt…

【miniconda】安装miniconda

☆ 问题描述 ubuntu环境下安装miniconda ★ 解决方案 ubuntu环境下安装miniconda 下载miniconda 包 miniconda官网地址&#xff1a;https://docs.conda.io/en/latest/miniconda.html 清华大学镜像地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/minicon…

超级加速器链接促进会(UALink)能否打破英伟达的垄断?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的飞速发展催生了对高性能计算和数据中心互联技术的巨大需求。然而&#xff0c;随着市场的集中化&#xff0c;英伟达凭借其专有的NVLink和InfiniBand技术&#xff0c;几乎垄断了这一市场。这种局面引起了其他科技巨头…

MFC实现子控件focus焦点上下移动父控件ListView和Gridview也跟着向上下移动

项目中要实现mfc功能&#xff0c;然后子空间焦点下移&#xff0c;LIstView和Gridview父空间不会下移&#xff0c;所以就有这个文章。废话不多说直接上代码。 MFCGridView.java import android.content.Context; import android.util.AttributeSet; import android.view.View;…

白酒:产地的酿酒历史与文化遗产

云仓酒庄豪迈白酒作为中国酿酒工艺的品牌之一&#xff0c;其产地的酿酒历史与文化遗产具有深远的意义和价值。产地酿酒历史悠久&#xff0c;代代相传的酿酒技艺和与众不同的文化传统&#xff0c;构成了云仓酒庄豪迈白酒与众不同的品质和风味。 据云仓酒庄豪迈介绍&#xff0c;中…

力扣----轮转数组

题目链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 思路一 我们可以在进行每次轮转的时候&#xff0c;先将数组的最后一个数据的值存储起来&#xff0c;接着将数组中前n-1个数据依次向后移&#xff0c;最后将存储起来的值赋给数组中的第一个数据。 …

Pixi绘制地图和小车

之前已经用Pixi绘制出了各种图形以及通过图片绘制精灵&#xff0c;这节用pixi绘制网格地图&#xff0c;并通过图片制作一个Sprite&#xff0c;让这个Sprite在网格地图上运动。首先需要在页面中添加一个div用来后期展示canvas的画布&#xff0c;并将此div实例化为PIXI的Applicat…

企业转型必上的监控系统智能管家大屏UI前端开发

企业转型必上的监控系统智能管家大屏UI前端开发

Istio安装记录

环境介绍 我使用的是k8s 1.23.3版本 istio使用的是istio-1.13.3-linux-amd64.tar.gz 把文件下载k8s集群下&#xff0c;解压 tar -vzxf istio-1.13.3-linux-amd64.tar.gz然后设置环境变量 [rootmaster istio]# cat /etc/profile export ISTIO_HOME/root/istio-1.13.3 expor…

3067. 在带权树网络中统计可连接服务器对数目 Medium

给你一棵无根带权树&#xff0c;树中总共有 n 个节点&#xff0c;分别表示 n 个服务器&#xff0c;服务器从 0 到 n - 1 编号。同时给你一个数组 edges &#xff0c;其中 edges[i] [ai, bi, weighti] 表示节点 ai 和 bi 之间有一条双向边&#xff0c;边的权值为 weighti 。再给…

Yolo-v5模型训练速度,与GeForce的AI算力描述

1.GeForce RTX3070 Ti官网参数&#xff1a; GeForce RTXTM 3070 Ti 和 RTX 3070 显卡采用第 2 代 NVIDIA RTX 架构 - NVIDIA Ampere 架构。该系列产品搭载专用的第 2 代 RT Core &#xff0c;第 3 代 Tensor Core、全新的 SM 多单元流处理器以及高速显存&#xff0c;助您在高性…