当前位置: 首页 > news >正文

代码模板,Cookie和Session

目录

代码模板

Cookie的基本使用

概念

Cookie的API

public Cookie(String name, String value)

 发送Cookie对象到客户端:使用response对象

创建Cookie对象并响应给浏览器 

在服务器后端获取Cookie对象 Cookie[]cookies=requset.getCookies(); 

Cookie的使用细节

1.持久化Cookie

 2.cookie存储特殊字符

 Session的基本使用

概念

 获取Session对象,使用request对象

存储数据到session域中

根据key,获取值

根据key,删除键值对

Session的原理


代码模板

我们发现重复写一个代码很繁琐,我们可以i设置一个代码模板

写一个组名

在组名中添加

写完代码模板之后,要点击define选择代码类型,正确会变成change

成功

Cookie的基本使用

概念

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

Cookie是创建服务器端,存在于浏览器端 

好处:减轻服务端压力

弊端:不安全,一旦清空浏览器数据,这些Cookie数据就会被清除 

Cookie的API

public Cookie(String name, String value)

创建Cookie对象,并设置数据

Cookie cookie=new Cookie("key","value");
 

 发送Cookie对象到客户端:使用response对象

reponse.addCookie(cookie);

创建Cookie对象并响应给浏览器 

步骤:

1.创建Cookie对象
 //name值是唯一的,如果name值一致,后出现的value会覆盖之前的value

2.把Cookie对象发送到浏览器

@WebServlet("/cookieServlet1")
public class cookieServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//创建Cookie对象//name值是唯一的,如果name值一致,后出现的value会覆盖之前的valueCookie cookie = new Cookie("msg", "赫赫");//把Cookie对象发送到浏览器response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

查看

在服务器后端获取Cookie对象 Cookie[]cookies=requset.getCookies(); 

@WebServlet("/cookieServlet2")
public class cookieServlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//取出请求中的所有Cookie对象Cookie[] cookies = request.getCookies();//遍历cookiesfor (Cookie cookie : cookies) {//获取cookie对象的nameString name = cookie.getName();//获取cookie的valueString value = cookie.getValue();System.out.println(name+"----"+value);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

结果:

Cookie的使用细节

1.持久化Cookie

cookie默认是会话级别的,会话结束(关闭浏览器),cookie消失,再次打开浏览器cookie就会不存在 。在开发中会话级别的cookie无法达到长时间共享数据

因此我们要使用持久化Cookie

持久化Cookie就是要使用Cooki类的方法

void setMaxAge(int expiry)  单位是秒 

测试

@WebServlet("/cookieServlet3")
public class cookieServlet3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//创建cookieCookie cookie = new Cookie("username", "hh");//设置持久化cookiecookie.setMaxAge(60*60*24);//一天//响应给cookieresponse.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

 2.cookie存储特殊字符

1.如果向cookie中存储特殊字符,如果存放就会报错,消息 Cookie值中存在无效字符[32] 描述 服务器遇到一个意外的情况,阻止它完成请求。

2.如果想向cookie中存储特殊字符需要对特殊符号进行编码和解码

存储

@WebServlet("/cookieServlet4")
public class cookieServlet4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String value="hh aa";//空格是特殊字符//直接响应给浏览器会报错 消息 Cookie值中存在无效字符[32] 描述 服务器遇到一个意外的情况,阻止它完成请求。//所以设置编码String encode = URLEncoder.encode(value, "utf-8");//创建CookieCookie cookie = new Cookie("msg", encode);response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

读取

@WebServlet("/cookieServlet5")
public class cookieServlet5 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取Cookie对象Cookie[] cookies = request.getCookies();for (Cookie cookie : cookies) {if("msg".equals(cookie.getName())){//取值String value = cookie.getValue();//解码String decode = URLDecoder.decode(value, "utf-8");System.out.println("decode="+decode);//decode=hh aa}}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

 Session的基本使用

概念

服务器会话跟踪技术:创建于服务器,将数据存储到服务端

        Session是将数据存储到服务端,而Cookie是将数据存储到客户端

        存储在客户端的数据容易被窃取

        存储在服务端的数据更安全

 获取Session对象,使用request对象

HttpSession session=request.getSession();//如果第一次执行就是创建session对象,如果不是第一次执行就是获取session

HttpSession session=request.getSession(boolean create);//如果是true,跟无参一样,如果是false表示如果存在session就获取,如果不存在就不创建session,就返回null;

 Session对象提供的功能:Session也是域对象,只要再一次会话过程中多次请求都可以共享seesion中的数据

存储数据到session域中

void setAttribute(String name,object c);

根据key,获取值

Object getAttribute(String name);

根据key,删除键值对

void removeAttribute(String name) 

测试

@WebServlet("/sessionServlet1")
public class sessionServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取SessionHttpSession session = request.getSession();//没有seesion就创建,有就获取//存储数据session.setAttribute("msg","session");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

 

@WebServlet("/sessionServlet2")
public class sessionServlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取sessionHttpSession session = request.getSession();//取出数据Object msg = session.getAttribute("msg");System.out.println(msg);//session}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

Session的原理

tomcat服务器会为每个浏览器(访问的Servlet创建Session)创建一个session容器,那么每个session容器该怎么区分?

         tomcat创建session容器之后会为每个seesion容器添加一个唯一的标识,这个标识JSESSIONID 并使用该标识来区分seesion容器

由于tomcat服务器存在多个session容器,那么对于浏览器甲来说,第二次访问tomcat服务器的时候,怎么找到自己的容器?

        其实tomcat在第一次为浏览器创建session容器的时候同时会创建一个会话Cookie,将session容器的唯一标识JSESSIONID存放到cookie中,然后将会话级别的cookie存放到浏览器中,当下次访问tomcat服务器时携带cookie,并在tomcat中取出cookie中的JSESESSION的值,进行比对查找找到自己创建的容器,然后再取出存储的数据

相关文章:

代码模板,Cookie和Session

目录 代码模板 Cookie的基本使用 概念 Cookie的API public Cookie(String name, String value) 发送Cookie对象到客户端:使用response对象 创建Cookie对象并响应给浏览器 在服务器后端获取Cookie对象 Cookie[]cookiesrequset.getCookies(); Cookie的使用细…...

Nginx配置及优化

Nginx配置及优化 前言nginx.conf拆分理解上线 最近在配置Nginx的时候,偶尔一些细致的理论有些模糊,配置起来费了点功夫,今天来详细写一下我个人的理解,文章参考了一些官网和其他优秀博主的文章http://t.csdnimg.cn/GbID9。 前言 …...

HashMap在Go与Java的底层实现与区别

在Java中 在Java中hash表的底层数据结构与扩容等已经是面试集合类问题中几乎必问的点了。网上有对源码的解析已经非常详细了我们这里还是说说其底层实现。 基础架构 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable,…...

搜维尔科技:使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目

使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目 搜维尔科技&#xff1a;使用Haption Virtuose 6D 力反馈通过机器人和虚拟现实完成远程操作项目...

【Python】WHEELTEC GPS G60主代码读取传感器数据代码(Windows系统)

【Python】WHEELTEC惯导IMU主代码读取传感器数据代码 Windows系统&#xff0c;直接输入串口号即可 读取设备的移动速度&#xff08;km/h&#xff09; 注&#xff1a;该GPS传感器需要在室外条件运行&#xff0c;室内可能接收不到信号。 # coding: utf-8 # last modified:202310…...

【Vue】Vue2与Vue3的区别

目录 响应式系统组合式API更小的体积编译优化新的生命周期钩子更好的性能组件结构与模板TeleportFragments 静态节点标记异步组件Slots的改进更好的TypeScript支持Composition API的引入 响应式系统 Vue2使用Object.defineProperty来实现响应式系统&#xff0c;这意味着只有预…...

马斯克的 xAI 帝国!60亿融资背后的超级布局?

在全球科技竞技场&#xff0c;每个重大融资事件都是对行业格局的一次重塑。近日&#xff0c;埃隆马斯克的人工智能初创企业 xAI 成功完成了一轮规模空前的融资——60亿美元&#xff0c;此举无疑在业界投下了一枚震撼弹&#xff0c;标志着 AI 领域内一场新的竞赛拉开了序幕。 …...

互联网医院开发:引领智慧医疗新时代

随着科技的迅猛发展和互联网的普及&#xff0c;传统医疗模式正在迎来一场深刻的变革。互联网医院的崛起&#xff0c;打破了时间和空间的限制&#xff0c;为患者和医疗机构带来了更加便捷、高效、安全的医疗服务体验。本文将从技术角度深入探讨互联网医院的开发&#xff0c;包括…...

民国漫画杂志《时代漫画》第18期.PDF

时代漫画18.PDF: https://url03.ctfile.com/f/1779803-1248612707-27e56b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;...

java.lang.NumberFormatException: For input string:

创建SpringBoot&#xff0c;Mybatis的项目时候&#xff0c;Service层调用Mapper层时候爆出了一个错误 发现报错是一个类型转换错误&#xff0c;经过排查后发现是因为mapper接收的实体类中没有写空参构造...

从零开始搭建Springboot项目脚手架4:保存操作日志

目的&#xff1a;通过AOP切面&#xff0c;统一记录接口的访问日志 1、加maven依赖 2、 增加日志类RequestLog 3、 配置AOP切面&#xff0c;把请求前的request、返回的response一起记录 package com.template.common.config;import cn.hutool.core.util.ArrayUtil; import cn.hu…...

持续总结中!2024年面试必问 20 道 Rocket MQ面试题(一)

一、请简述什么是RocketMQ&#xff1f; RocketMQ是一个开源的消息中间件&#xff0c;由阿里巴巴团队开发&#xff0c;主要设计用于分布式系统中的异步通信、应用解耦、流量削峰和消息持久化。它支持高吞吐量、高可用性、可扩展性和容错性&#xff0c;是构建大规模实时消息处理…...

生成式AI的GPU网络技术架构

生成式AI的GPU网络 引言&#xff1a;超大规模企业竞相部署拥有64K GPU的大型集群&#xff0c;以支撑各种生成式AI训练需求。尽管庞大Transformer模型与数据集需数千GPU&#xff0c;但实现GPU间任意非阻塞连接或显冗余。如何高效利用资源&#xff0c;成为业界关注焦点。 张量并…...

旅游卡在哪里拿货?千益畅行旅游卡源头

旅游卡是一种便捷的旅行工具&#xff0c;它可以提供多种优惠和特惠&#xff0c;让人们在旅行中更加省钱、省心。那么&#xff0c;在千益畅行旅游卡这里&#xff0c;我们该如何拿到这张神奇的旅游卡呢&#xff1f; 首先&#xff0c;千益畅行旅游卡作为一款专为旅行爱好者打造的…...

代码随想录算法训练营第四十一天| 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯

509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 文档讲解&#xff1a;代码随想录/斐波那契数 视频讲解&#xff1a;视频讲解-斐波那契数 状态&#xff1a;已完成&#xff08;1遍&#xff09; 解题过程 看到题目的第一想法 虽然看了卡哥的动态规划五部曲&#xff0c;…...

Ribbon负载均衡(自己总结的)

文章目录 Ribbon负载均衡负载均衡解决的问题不要把Ribbon负载均衡和Eureka-Server服务器集群搞混了Ribbon负载均衡代码怎么写ribbon负载均衡依赖是怎么引入的&#xff1f; Ribbon负载均衡 负载均衡解决的问题 首先Ribbon负载均衡配合Eureka注册中心一块使用。 在SpringCloud…...

Leetcode 力扣92. 反转链表 II (抖音号:708231408)

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,2…...

OSI七层模型和TCP/IP四层模型的区别

OSI七层模型 1.物理层&#xff08;Physical Layer&#xff09; 实现相邻节点之间比特流的透明传输&#xff0c;尽可能屏蔽传输介质带来的差异。典型设备&#xff1a;集线器&#xff08;Hub&#xff09;。 2.数据链路层&#xff08;Data Link Layer&#xff09; 将网络层传下来…...

在虚拟机上安装MySQL和Hive

在虚拟机上安装MySQL和Hive的步骤如下。这里将分别针对MySQL和Hive的安装进行说明。 MySQL安装步骤 1. 准备工作 下载MySQL安装包&#xff0c;选择与你虚拟机操作系统版本相匹配的MySQL版本&#xff0c;例如MySQL 8.0.35。 2. 卸载旧版本&#xff08;如果已安装&#xff09…...

Vue 2 和 Vue 3 中同步和异步

Vue 2 和 Vue 3 中同步和异步 Vue 2 同步和异步 同步更新 (Synchronous Updates) Vue 2 在数据更新后会进行同步渲染更新,但为了性能优化,Vue 会在内部队列中异步地进行 DOM 更新。这意味着数据变化会立即被捕捉到,但实际的 DOM 更新会被推迟到下一个事件循环队列中。new V…...

TPCH dbgen数据生成工具在Linux环境下的配置与实战

1. 环境准备&#xff1a;从零搭建TPCH测试环境 第一次接触TPCH dbgen工具时&#xff0c;我花了整整两天时间才搞明白所有依赖关系。这个工具虽然功能强大&#xff0c;但官方文档确实不够友好。下面把我踩过的坑都总结出来&#xff0c;让你能快速上手。 系统要求方面&#xff0c…...

AutoHotkey自动化效率提升指南:从入门到进阶的全场景应用技巧

AutoHotkey自动化效率提升指南&#xff1a;从入门到进阶的全场景应用技巧 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.co…...

Zotero Actions Tags:自动化文献管理,告别手动标签整理

Zotero Actions & Tags&#xff1a;自动化文献管理&#xff0c;告别手动标签整理 【免费下载链接】zotero-actions-tags Customize your Zotero workflow. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-actions-tags 你是否还在为Zotero文献库中杂乱无章的标…...

5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南

5大核心功能深度解析&#xff1a;Umi-OCR开源离线文字识别工具的技术实现与应用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二…...

告别插件切换!一款满足你所有挖洞需求的浏览器插件助力高效挖洞

0x01 工具介绍 由于目前网上流通的插件功能都各有千秋&#xff0c;每个插件都有他自己的亮点&#xff0c;每次使用都得按场景去选择插件&#xff0c;为了能够有一款属于自己的完美插件&#xff0c;不用来回倒腾切换&#xff0c;由此GodEyes 诞生了。 它是一款可以帮助安全研究…...

如何高效使用Zettlr:开源写作工具的实用配置与技巧指南

如何高效使用Zettlr&#xff1a;开源写作工具的实用配置与技巧指南 【免费下载链接】Zettlr Your One-Stop Publication Workbench 项目地址: https://gitcode.com/GitHub_Trending/ze/Zettlr 还在为学术写作和知识管理寻找一个功能全面、界面简洁的跨平台工具吗&#x…...

HS2-HF Patch:驱动创作自由的智能补丁系统与需求动态匹配技术

HS2-HF Patch&#xff1a;驱动创作自由的智能补丁系统与需求动态匹配技术 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 在游戏创作领域&#xff0c;玩家对个性…...

百度网盘Mac版下载加速引擎:突破限速的完整优化指南

百度网盘Mac版下载加速引擎&#xff1a;突破限速的完整优化指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 当你面对100KB/s的下载速度&#xff0c…...

ComfyUI-WanVideoWrapper显存优化终极指南:让8GB显卡也能流畅生成高清视频

ComfyUI-WanVideoWrapper显存优化终极指南&#xff1a;让8GB显卡也能流畅生成高清视频 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 还在为视频生成时的显存不足而烦恼吗&#xff1f;ComfyUI-…...

数据库课程设计好帮手:Phi-4-mini-reasoning辅助ER图设计与SQL优化

数据库课程设计好帮手&#xff1a;Phi-4-mini-reasoning辅助ER图设计与SQL优化 1. 课程设计的痛点与解决方案 每到学期末&#xff0c;计算机专业的学生们都会面临一个共同的挑战——数据库课程设计。这个需要完成ER图设计、SQL编写和文档撰写的综合项目&#xff0c;常常让初学…...