JavaWeb(十一)

一、会话跟踪技术的概述

1.1、会话的概念

        用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

        从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了,会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着。浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程就被称之为会话。

        用实际场景来理解下会话,比如在我们访问京东的时候,当打开浏览器进入京东首页后,浏览器和京东的服务器之间就建立了一次会话,后面的搜索商品,查看商品的详情,加入购物车等都是在这一次会话中完成。

        下图中一共建立了3次会话,每个浏览器都会与服务端建立一个会话,中间的第二次会话中,包含两次请求和响应

        

 

1.2、会话跟踪的概念

        服务器会收到多个请求,这多个请求可能来自多个浏览器,如上图中的6个请求来自3个浏览器。服务器需要用来识别请求是否来自同一个浏览器,服务器用来识别浏览器的过程,这个过程就是会话跟踪。服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据。

1.3 、会话跟踪在实际中的应用

        我们打开京东的网站,将商品加入购物车去购物车结算是两次请求,购物车结算的时候需要展示加入购物车的商品,就需要用到数据共享。

1.4、会话跟踪的实现

        浏览器和服务器之间使用的是HTTP请求来进行数据传输,HTTP协议是无状态的,HTTP协议设计成无状态的目的是让每次请求之间相互独立互不影响。所以每次浏览器向服务器请求时,服务器都会将该请求视为新的请求。所以现在浏览器和服务器不支持数据共享。

        为了解决浏览器和服务器不支持数据共享的问题,具体的实现方式有:Cookie(客户端会话跟踪技术)、Session(服务端会话跟踪技术)。

二、Cookie

2.1、Cookie的概念

 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。

2.2、Cookie的案例

        服务端提供了两个Servlet,分别是ServletAServletB,浏览器发送HTTP请求1给服务端,服务端ServletA接收请求并进行业务处理。服务端ServletA在处理的过程中可以创建一个Cookie对象并将name=zs的数据存入Cookie,服务端ServletA在响应数据的时候,会把Cookie对象响应给浏览器。浏览器接收到响应数据,会把Cookie对象中的数据存储在浏览器内存中,此时浏览器和服务端就建立了一次会话。

         在同一次会话中浏览器再次发送HTTP请求2给服务端ServletB,浏览器会携带Cookie对象中的所有数据,ServletB接收到请求和数据后,就可以获取到存储在Cookie对象中的数据,这样同一个会话中的多次请求之间就实现了数据共享。

        

2.3、代码的实现 

2.3.1、创建Maven项目cookie-demo,并在pom.xml添加依赖
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
    <!--servlet-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--jsp-->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
    <!--jstl-->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
        </plugin>
    </plugins>
</build>
 
2.3.2、编写Servlet类,名称为AServlet

        在Servlet中创建Cookie对象,存入数据,发送给前端

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //发送Cookie
        //1. 创建Cookie对象
        Cookie cookie = new Cookie("username","zs");
        //2. 发送Cookie,response
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
2.3.3、启动项目,并在页面访问:http://localhost:8080/cookie-demo/aServlet

在chrome浏览器通过开发者工具包查看Cookie的值

2.3.4、编写一个新Servlet类,名称为BServlet

获取客户端携带的所有Cookie,使用request对象。

@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie
        //1. 获取Cookie数组
        Cookie[] cookies = request.getCookies();
        //2. 遍历数组
        for (Cookie cookie : cookies) {
            //3. 获取数据
            String name = cookie.getName();
            if("username".equals(name)){
                String value = cookie.getValue();
                System.out.println(name+":"+value);
                break;
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/228028.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

麦谈帮集成API如何优化电商平台、CRM和客服系统:无代码开发的未来

无代码开发的游戏规则改变者 在数字化的浪潮下&#xff0c;电商平台、CRM和客服系统的效率和同步性直接影响着企业的运营成效。麦谈帮以其领先的无代码API集成技术&#xff0c;正重新定义这一领域的游戏规则。通过其提供的400多个接口&#xff0c;企业能够迅速连接不同的系统和…

CentOS 7.9安装宝塔面板,安装gitlab服务器

docker安装方式比较慢&#xff0c;安装包1.3GB 安装后启动很慢 docker logs q18qgztxdvozdv_gitlab-ce-gitlab-1 docker ps docker exec -it q18qgztxdvozdv_gitlab-ce-gitlab-1 sh cd /etc/gitlab cat initial_root_password 软件商店安装方式&#xff0c;失败了2023.12…

生产上线需要注意的安全点

一、关闭swagger 1、关闭swagger v3 # 需同时设置auto-startupfalse&#xff0c;否则/v3/api-docs等接口仍能继续访问 springfox:documentation:enabled: falseauto-startup: falseswagger-ui:enabled: false 2、关闭swagger v2 # 只要不是true就不启用 swagger:enable: fa…

多窗口量子纠缠技术实现

1. 前言 最近看到下面这个&#xff0c;多窗口下实现量子纠缠的特效感觉很惊艳和有创意。 除 Three.js 的特效果部分&#xff0c;技术实现上还是很简单的。 2. 技术点分析 这里面核心两个技术点&#xff1a; 不同 Tab 窗口下的消息通讯。窗口的位置获取。 2.1 Tab 窗口通讯…

小红书蒲公英平台开通后,有哪些注意的地方,以及如何进行报价?

今天来给大家聊聊当小红书账号过1000粉后&#xff0c;开通蒲公英需要注意的事项。 蒲公英平台是小红书APP中的一个专为内容创作者设计的平台。它为品牌和创作者提供了一个完整的服务流程&#xff0c;包括内容的创作、推广、互动以及转换等多个方面。 2.蒲公英平台的主要功能 &…

LIS检验系统,涵盖实验室全部管理流程,适合各种实验机构的业务流程

LIS检验系统源码&#xff0c;云LIS医学检验系统源码 LIS检验系统涵盖实验室的全部管理流程&#xff0c;包括从检验申请、标本采集、实验检测、报告发布的、质控管理、科室事务、试剂管理等完整流程的功能&#xff0c;实现智能化、自动化、规范化管理&#xff0c;遵循医学实验室…

查看虚拟机的版本

1、查看虚拟机的版本 cat /etc/centos-release 2、开启防火墙 systemctl start firewalld 3、查看防火墙状态 firewall-cmd --state

基于SpringBoot+maven+Mybatis+html慢性病报销系统(源码+数据库)

一、项目简介 本项目是一套基于SpringBootmavenMybatishtml慢性病报销系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&a…

【数据结构(六)】排序算法介绍和算法的复杂度计算(1)

文章目录 1. 排序算法的介绍1.1. 排序的分类 2. 算法的时间复杂度2.1. 度量一个程序(算法)执行时间的两种方法2.2. 时间频度2.2.1. 忽略常数项2.2.2. 忽略低次项2.2.2. 忽略系数 2.3. 时间复杂度2.4. 常见的时间复杂度2.5. 平均时间复杂度和最坏时间复杂度 3. 算法的空间复杂度…

浅析AI智能视频监控技术在城市交通中的作用及意义

城市交通作为整个城市的整体脉络&#xff0c;每天都发挥着重要作用&#xff0c;为了最大程度地避免城市交通堵塞、提高城市交通效率&#xff0c;智能视频监控系统发挥了重要作用。具体表现在以下几个方面&#xff1a; 1、交通违规监管&#xff1a;TSINGSEE青犀智能视频监控系统…

软件开发代码审核制度

建立软件代码审核制度是确保代码质量和团队协作的重要步骤。以下是建立有效的软件代码审核制度的一些建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.制定代码审核准则&#xff1a; 明确定义代…

【C/PTA —— 15.结构体2(课内实践)】

C/PTA —— 15.结构体2&#xff08;课内实践&#xff09; 7-1 计算职工工资7-2 计算平均成绩7-3 找出总分最高的学生7-4 通讯录的录入与显示 7-1 计算职工工资 #include<stdio.h> #include<stdlib.h> typedef struct GZ {char name[6];double j;double f;double z;…

如何将 MySQL 数据库转换为 SQL Server

本文解释了为什么组织希望将其 MySQL 数据库转换为 Microsoft SQL 数据库。本文接着详细介绍了尝试转换之前需要记住的事项以及所涉及的方法。专业的数据库转换器工具将帮助您快速将 MySQL 数据库记录转换为 MS SQL Server。 在继续之前&#xff0c;我们先讨论一下 MySQL 到 M…

React/Vue/Svelte 前端项目中开始使用TailwindCSS

背景 TailwindCSS 近年来在前端圈非常流行&#xff0c;它摆脱了原有的CSS限制&#xff0c;以灵活实用为卖点&#xff0c;用户通过各种class组合即可构建出漂亮的用户界面。对于初学者而言&#xff0c;可能需要一些上手成本&#xff0c;一旦掌握实用技巧后&#xff0c;Tailwind…

TCP通信

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点…

QQ录屏怎么录声音,如何解决声音录制问题?

在数字化时代&#xff0c;qq不仅是我们日常沟通的工具&#xff0c;还提供了强大的录屏功能&#xff0c;让用户能够轻松捕捉屏幕上的精彩瞬间。然而&#xff0c;很多用户可能会困惑于qq录屏怎么录声音。在本文中&#xff0c;我们将详细介绍如何通过QQ录屏功能录制屏幕及声音&…

【C/PTA —— 15.结构体2(课外实践)】

C/PTA —— 15.结构体2&#xff08;课外实践&#xff09; 7-1 一帮一7-2 考试座位号7-3 新键表输出7-4 可怕的素质7-5 找出同龄者7-6 排队7-7 军训 7-1 一帮一 #include<stdio.h> #include<string.h>struct student {int a;char name[20]; };struct student1 {int …

JavaWeb-HTTP协议

1. 什么是HTTP协议 HTTP超文本传输协(Hyper Text transfer protocol)&#xff0c;是一种用于用于分布式、协作式和超媒体信息系统的应用层协议。它于1990年提出&#xff0c;经过十几年的使用与发展&#xff0c;得到不断地完善和扩展。HTTP 是为 Web 浏览器与 Web 服务器之间的…

新生儿出生缺陷筛查的关键注意事项

引言&#xff1a; 新生儿的出生缺陷是一个复杂而广泛的问题&#xff0c;及早的筛查和诊断对于预防和管理这些缺陷至关重要。出生缺陷可能涉及各个系统&#xff0c;包括心脏、神经、遗传等&#xff0c;因此及时而全面的筛查对新生儿的健康至关重要。本文将深入探讨新生儿出生缺…

Matlab 点云对称性检测

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 这是一个很有趣的功能,它的思路其实与ICP算法的思路有些相似: 首先,它会初始化两个旋转角度,即绕x轴旋转与绕y轴旋转,初始的过程是将点对称(镜像)过去,计算与匹配点之间的距离误差,误差最小者为最优初始值…