代码模板,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的值,进行比对查找找到自己创建的容器,然后再取出存储的数据

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【InternLM实战营第二期笔记】03:“茴香豆“,搭建你的 RAG 智能助理(未完成)

文章目录 笔记-RAG课程结构为什么要用 RAG?定义工作原理向量数据库RAG 工作流程发展历程常见优化RAG vs 微调LLM 优化方法比较RAG的评价总结 笔记-茴香豆什么是茴香豆茴香豆实战 笔记-RAG 课程结构 为什么要用 RAG? 新增知识,尤其是高频变动…

基于51单片机简易温度计

一.硬件方案 本系统利用51单片机控制温度传感器DS18B20进行温度的实时检测并显示,能够实现快速测量环境温度。硬件以微控制器为核心,外接时钟电路、复位电路、温度测量电路、LED显示电路组成。 二.设计功能 (1)采用DS18B20温度…

Node.js和npm常用命令

一、Node.js简介 Node.js是一个免费、开源、跨平台的JavaScript运行时环境,允许开发人员创建服务器、web应用程序、命令行工具和脚本。 点击查看node.js中文官网 点击查看node.js英文官网 二、npm简介 npm(Node Package Manager)是Node.js的软件包管理器&#xff0…

ssm150旅游网站的设计与实现+jsp

旅游网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞…

工作纪实50-Idea下载项目乱码

下载了公司的一份项目代码,发现是gbk格式的,但是我的日常习惯又是utf-8,下载项目以后全是乱码,一脸懵 借用网友的一张图,如果是一个一个文件这么搞,真的是费劲,好几百个文件! 步骤…

NSS‘题目练习3

[SWPUCTF 2021 新生赛]easyupload3.0 打开题目发现要求上传.jpg文件 先上传抓包,尝试更改后缀 换一种形式 文件头绕过 都试过之后尝试上传.htaccess文件,发现上传成功 会将之后上传的文件后缀自动更名为.php 再上传.jpg文件 蚁剑连接找到flag [SWPUCTF …

保障餐饮场所安全:可燃气体报警器专业检测的必要性

在餐饮行业,火灾隐患一直是备受关注的问题。为了有效预防和及时发现可燃气体泄漏,可燃气体报警器的专业检测周期显得尤为重要。 今天,佰德和大家一起来深入了解一下可燃气体报警器的专业检测周期,若您对此有不同的观点或其他的问…

K8S集群监控方案之Prometheus+kube-state-metrics+Grafana

序言 | Prometheus 中文文档 方案简单架构图 一、部署kube-state-metrics 1、部署文件下载 地址 kube-state-metrics/examples/standard at main kubernetes/kube-state-metrics GitHub 2、修改下载的文件 2.1、修改镜像 原镜像可能下载不了,这里修改deploy…

苹果与OpenAI合作在即:iOS 18中的ChatGPT引发期待与担忧

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

互联网应用主流框架整合之数据库事务管理

在互联网系统中同时运行着成千上百个线程是十分常见的事情,尤其当一个热门出现时,用户几乎同时打开手机、电脑、平板灯设备进行访问,这样就会导致数据库处在一个多事务访问的环境中,从而引发数据丢失或者数据不一致的现象&#xf…

计算机考研|408开始的晚,如何规划复习?

408开始的比较晚不用怕 只需要6个月的复习时间,按照我的复习计划,你至少可以考100这个分数 我的计划是对于基础差的考生的,大佬们就可以绕道了,对于基础差的考生来说,408复习的难点其实在于学好数据结构和计算机组成…

rk3568_semaphore

文章目录 前言1 什么是信号量1.1 信号量API函数2、信号量实验2.1 实验目的2.2函数源码2.3 运行结果图前言 本文记录rk3568开发板的信号量实验 1 什么是信号量 信号量是同步的一种方式,常常用于控制对共享资源的访问。 举个例子:停车场的停车位有100个,这100个停车位就是共…

【Python】 如何将列表转换为字符串

基本原理 在Python中,列表(list)和字符串(string)是两种不同的数据类型。列表是一个有序的元素集合,可以包含不同类型的元素,而字符串则是一个字符序列。有时,我们可能需要将列表中…

【chagpt】广泛使用API之前:考虑成本和数据隐私

文章目录 一. 定价和标记限制二. 安全和隐私 在广泛使用API之前,应该考虑两个重要因素:成本和数据隐私。 一. 定价和标记限制 OpenAI在Pricing页面上列出了模型的定价。请注意,OpenAI不一定及时更新该页面上的定价信息,因此实际…

预训练模型语义相似性计算(十一) - M3E和BGE

M3E m3e由MokaAI 训练,开源和评测。 m3e的详细介绍可以看官方的github介绍。本文简要摘录其中一些点,以便后续的应用。 1.千万级 (2200w) 的中文句对数据(开源)。 2.支持同质相似句计算(s2s)和异质检索(s2p),后续支持代码检索。 3.m3e基座模…

C# 泛型函数

1.非约束 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MyGeneirc {public class GeneircMethod{/// <summary>/// 泛型方法解决&#xff0c;一个方法&#xff0c;满足不同参数类型…

JVM学习-彻底搞懂Java自增++

从字节码角度分析i和i的区别 public void method6() {int i 10;i; //在局部变量表上直接加1}public void method7() {int i 10;i; //字节码同i}public void method8() {int i 10;int a i; //通过下图可以看出先将局部变量表中的值push到操作数栈&#xff0c;然…

springboot项目部署到linux服务器

springboot后端 修改前 修改后 vue前端 修改前 将地址中的 localhost改为 ip 重新生成war包 war上传到linux的tomcat的webapps下 其他环境配置和macOS大差不差 Tomcat安装使用与部署Web项目的三种方法_tomcat部署web项目-CSDN博客

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

Matlab读取Swarm球谐系数,并绘制EWH全球格网图(存在疑问)

ICGEM官网下载 COST-G发布的4040的球谐系数 close all; clearvars -except; % addpath(E:\Code\Tool\Function\GRACE_functions); dir_degree_1 E:\Code\GRACE_data\Degree_1\deg1_coef.txt; dir_c20 E:\Code\GRACE_data\Degree_2\C20_RL06.txt; myDir_Swarm E:…