代码模板,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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie对象
        //name值是唯一的,如果name值一致,后出现的value会覆盖之前的value
        Cookie cookie = new Cookie("msg", "赫赫");
        //把Cookie对象发送到浏览器
        response.addCookie(cookie);
    }

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

查看

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

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

    @Override
    protected 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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建cookie
        Cookie cookie = new Cookie("username", "hh");
        //设置持久化cookie
        cookie.setMaxAge(60*60*24);//一天
        //响应给cookie
        response.addCookie(cookie);
    }

    @Override
    protected 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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String value="hh aa";//空格是特殊字符

        //直接响应给浏览器会报错 消息 Cookie值中存在无效字符[32] 描述 服务器遇到一个意外的情况,阻止它完成请求。
        //所以设置编码
        String encode = URLEncoder.encode(value, "utf-8");
        //创建Cookie
        Cookie cookie = new Cookie("msg", encode);
        response.addCookie(cookie);


    }

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

 

读取

@WebServlet("/cookieServlet5")
public class cookieServlet5 extends HttpServlet {
    @Override
    protected 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
            }
        }
    }

    @Override
    protected 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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Session
        HttpSession session = request.getSession();//没有seesion就创建,有就获取
        //存储数据
        session.setAttribute("msg","session");
    }

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

 

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

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

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

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

相关文章

牛!华为《Linux 面试笔记大全》太赞了,完整版PDF 开放下载!

在QQ和微信社群中,我注意到许多人都在寻找一份全面的Linux学习资料。因此,我在这里为大家整理和分类了相关的信息,可以看作是对重点内容的梳理和归纳。 这份《Linux面试笔记》主要分为三大部分:基础篇-进阶篇-高级篇 本书笔记针…

Linux主机连接腾讯云服务器详细配置

硬件条件 当然你要先有一个云服务器,腾讯云比阿里云便宜一点,所以就用腾讯云了 问了师兄买这个98的就行,选择CentOS,不要选Ubuntu,因为 嗯,大概就是这样 编程测试 云服务器当然是作为服务端 server.cpp…

蓝桥杯备赛——DP续【python】

一、小明的背包2 试题链接:https://www.lanqiao.cn/problems/1175/learning/ 输入示例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 120 问题分析 这题是完全背包,每个物品有无数个,所以对于任意dp[i][j](其表示的意思为选到第i个…

18 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 地表水储量变化Glads水文数据处理

18 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 地表水储量变化 0 引言1 Grace陆地水储量过程整合0 引言 由水量平衡方程可以将地下水储量的计算过程分解为3个部分,第一部分计算陆地水储量变化、第二部分计算地表水储量变化、第三部分计算地下水储量变化。本篇简单介绍…

前端Vue小兔鲜儿电商项目实战Day01

一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…

嵌入式C语言指针详细解说

各位伙伴大家好,在实现操作系统的控制的时候,经常需要使用到指针,利用这次详细分析一下指针的用法。 C语言指针真正精髓的地方在于指针可以进行加减法,这一点极大的提升了程序对指针使用的灵活性,同时也带来了不小的学习负担。正是因为C语言指针可运算,才奠定了如今C语言…

SQL数据分析常用函数

SQL 中有许多常用的函数&#xff0c;可以用于处理和操作数据。以下是一些常见的SQL 函数&#xff1a; 1. 字符串函数&#xff1a; CONCAT(str1, str2, …): 用于把多个文本字符串合并成一个长字符串(参数中有null时返回null)。 select concat(一起,学, SQL); -- 输出结果:一…

基于朴素贝叶斯算法的微博舆情监控系统,flask后端,可视化丰富

背景&#xff1a; 微博作为中国最大的社交媒体平台之一&#xff0c;汇聚了海量用户生成的文本数据&#xff0c;承载着丰富的社会信息和舆论动向。随着互联网的快速发展&#xff0c;人们对于利用这些数据进行舆情分析和预测的需求日益增加。在这种情况下&#xff0c;以Python为…

汽车电子零部件(14):TMS热管理系统

前言: TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要…

遇到了导师放养,该怎么坚持?

最近收到学生读者的留言&#xff0c;抱怨科研的困难。导师忙碌且学生众多&#xff0c;自己只是众多学生之一&#xff0c;常常处于放养状态。除了每周的组会外&#xff0c;几乎无法接触到导师。在这种状态下&#xff0c;缺乏方向和动力&#xff0c;非常担心无法顺利毕业&#xf…

navicat连接过的库忘记密码

1、点击文件->导出连接 2、勾选想要知道密码的库 3、打开导出的文件搜索Password 4、复制Password解密 把下面的php代码复制到在线运行php的网站&#xff0c;替换最下面的decrypt(‘B7246A6E64D4F50A563FA20427A47991’)括号里的内容&#xff0c;然后执行php代码&#xff0…

PHP开发入门

PHP官网&#xff1a;PHP: Hypertext Preprocessor apache官网&#xff1a;https://httpd.apache.org/ 一、搭建PHP环境 下载apache 进入官网点击download 选择下载windows版本文件 点击进入下载界面 点击下载64位版本文件 下载后解压文件 解压文件后进入 D:\httpd-2.4.59-24…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

《TCP/IP网络编程》(第十二章)I/O复用(1)

本章将讨论实现并发服务器的第二种办法&#xff0c;基于I/O复用的服务器端构建。 I/O复用它允许单个进程或线程同时处理多个输入/输出&#xff08;I/O&#xff09;操作&#xff0c;而无需为每个I/O操作创建一个独立的线程或进程。这种技术可以显著提高应用程序的效率和性能&…

多模态中的模态有哪些

“多模态”这个名字中的“模态”&#xff08;modality&#xff09;&#xff0c;指的是不同的数据类型或信息源。在多模态大模型中&#xff0c;常见的模态包括&#xff1a; 文本模态&#xff1a; 包括自然语言文本、语音识别文本等。 图像模态&#xff1a; 指图像数据&#xff…

SEO之核心关键词(二)

初创企业或者需要建站的朋友看以下两篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议新手上云 &#xff08;接上一篇。。。。&#xff09; 4、查询搜索次数 经过自己及朋友、同事的头脑风暴和检查竞争对手网站之后&#xff0c;再到Google 关键词…

力扣232. 用栈实现队列(两栈实现队列)

Problem: 232. 用栈实现队列 文章目录 题目描述思路Code 题目描述 思路 利用两个栈&#xff0c;一个入栈一个出栈搭配着实现队列的相关操作&#xff1a; 1.创建两个栈stack1和stack2&#xff1b; 2.void push(int x):将要入队的元素先入栈stack1&#xff1b; 3.int pop()&…

Vue3中点击关闭按钮后清除 el-table 表单内容

Vue3中点击关闭按钮后清除 el-table 表单内容 一、前言1、关闭事件2、清除函数实现3、具体代码 一、前言 在 Vue 3 中&#xff0c;通过使用 Element UI 的 el-table 组件来展示表格数据是一种常见的做法。有时候&#xff0c;当用户点击关闭按钮后&#xff0c;我们希望能够清除…

寒冬来了,字节跳动开启裁员新模式。。

大家好&#xff0c;我是白露啊。 不得不说&#xff0c;字节跳动还是真的会搞事啊。 最近一段时间&#xff0c;字节搞出了一个裁员新模式&#xff1a;“细水长流”。这个寓意和“财&#xff08;裁&#xff09;源&#xff08;员&#xff09;广进”计划差不多了&#xff0c;只不…

Docker安装Nginx 并实现通过nginx部署静态网址

Docker镜像就是一个只读的模板&#xff0c;可以用来创建Docker容器。 例如&#xff1a;一个镜像可以包含一个完整的centos操作系统环境&#xff0c;里面仅安装了mysql、nginx等或用户需要的其他应用程序。 Docker提供了一个非常简单的机制来创建镜像或者更新现有的镜像&#…