(十三)Servlet教程——Servlet中Cookie的使用

 1.什么是Cookie

        Cookie意为甜饼,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器都支持Cookie。

        由于HTTP是一种无状态的协议,服务器仅从网络连接上无法知道客户身份。于是就客户端颁发一个通行证,无论谁访问都必须携带自己的通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

        Cookie实际上就是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再次请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

        查看某网站颁发的Cookie很简单。在浏览器地址栏输入javascript:alert(document.cookie)就可以了。JavaScript脚本会弹出一个对话框显示本网站颁发的所有Cookie的内容。

        比方我们现在浏览器中打开百度网站

        在浏览器输入框中输入javascript:alert(document.cookie),然后点击回车,该网站所有的Cookie就会显示在弹框中

        一般情况下网站会使用特数的方法将Cookie信息进行加密。

        Cookie功能需要浏览器的支持。如果浏览器不支持Cookie,或者把Cookie禁用,Cookie功能就会失效。不同的浏览器使用不同的方式保存Cookie。

2. 使用Cookie

        Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie类对象对客户端Cookie进行操作。通过request.getCookie()获取客户端提交的所有Cookie,通过response.addCookie(Cookie cookie)向客户端设置Cookie。

        Cookie对象使用key-value属性对的形式保存用户状态,key表示Cookie的名字,名字必须是唯一的;value是Cookie对象中存放的数据,可以是任意对象。一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。

下面的程序可以生成一个Cookie对象:

String str="Hello Java Web Program!";

Cookie c=new Cookie("Name",str);

        上面的Cookie对象中,key为Name,其值为str对象。通过response对象,可以将Cookie对象设置到客户端浏览器上。
 response.addCookie(c);

        下面通过实例来说明怎样将一个名为“Name”的Cookie设置到客户端。

        创建一个名为SetCookie的Servlet设置Cookie的值。

@WebServlet("/setcookie")

public class SetCookie extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");

        PrintWriter out=response.getWriter();

        out.println("<html><head><title>A Servlet</title></head>");

        out.println("<body>");

        String str="Hello Java Web Program!";

        Cookie c=new Cookie("Name",str);

        response.addCookie(c);

        out.println("<br>");

        out.println("Add Cookie OK!");

        out.println("</body></html>");

        out.flush();

        out.close();

    }

}

试着启动了该Web项目,访问该Servlet后发现该Servlet不能够正常执行。

调试后才发现该Servlet报错了

 将字符串通过UrlEncode编码后再保存到Cookie中

 String str="Hello Java Web Program!";

 str= URLEncoder.encode(str,"UTF-8");

 Cookie c=new Cookie("Name",str);

 然后再刷新浏览器

Cookie增加成功的信息就展示在页面上了。

接着来创建一个名为GetCookie的Servlet来获取Cookie的值。

@WebServlet("/getcookie")

public class GetCookie extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html><head><title>Cookie Getting</title><head>");

        out.println("<body>");

        Cookie[] alls = request.getCookies();

        if (alls != null && alls.length > 0) {

            for (int i = 0; i < alls.length; i++) {

                if ("Name".equals(alls[i].getName())) {

                    String value=alls[i].getValue();

                    value= URLDecoder.decode(value,"UTF-8");

                    out.println(value);

                }

            }

        }

        out.println("</body></html>");

        out.flush();

        out.close();

    }

}

通过在浏览器中输入 http://localhost:8080/s001/getcookie 获取cookie并在页面中打印出来

 3.Cookie的寿命

        Cookie是一种可以制定寿命的对象,一旦Cookie达到其寿命,Cookie自动失效,相同名称的Cookie对象发送给同一个IE浏览器时,后面的Cookie对象会将前面写入的Cookie对象覆盖。

        Cookie的maxAge()决定着Cookie的有效期,单位为秒。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

        如果maxAge参数为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之内,登录网站时该Cookie仍然有效。

以下代码中的Cookie信息将会永远有效。

        如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie的信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失掉了。Cookie默认的maxAge为-1。

        response对象提供的Cookie操作方法只有一个添加操作addCookie,并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie并添加到response中覆盖原来的Cookie即可。

        如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

        从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

4.设置Cookie的属性

setMaxAge()设置Cookie的失效时间。

setSecure()设置Cookie是否仅被使用安全协议传输。

setPath()设置Cookie的使用路径。如果设置为“/CookieWeb/”,则只有contextPath为“/CookieWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。

setDomain()设置可以访问该Cookie的域名。

setVersion()设置Cookie使用的版本号。

5.使用Cookie的限制

        Cookie在网站设计方面,其功能十分灵活,但是Cookie在使用时,有许多限制,下面是在网站设计时需要注意的地方。

  1. Cookie对浏览器有特定的要求,首先浏览器要支持Cookie功能,并且在权限上要允许程序操作客户端浏览器。
  2. Cookie对象是一种数据类型对象,Cookie的读写,必须通过request对象和response对象完成,request对象和response对象是浏览器和服务器间进行通信的唯一途径。

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

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

相关文章

神之浩劫2测试在哪下载 神之浩劫2客户端下载教程

在备受玩家喜爱的第三人称动作MOBA《神之浩劫》的辉煌基础上&#xff0c;其续作《神之浩劫2》宣布将于5月3日&#xff08;北京时间&#xff09;正式启动Alpha测试旅程&#xff0c;首度揭开神秘面纱&#xff0c;14位英勇角色静候被选中的探险者。此番&#xff0c;《神之浩劫2》的…

unity项目《样板间展示》开发:逻辑代码实现

unity项目《样板间展示》开发&#xff1a;逻辑代码实现 前言漫游逻辑实现UI功能逻辑实现静态光线问题解决结语 前言 这个项目的教程文章已经断更三个月之久&#xff0c;现向学习该项目dome的小伙伴们致歉。 断更原因嘛&#xff0c;就是实习工作&#xff0c;后续我也会发布相关的…

注意力机制(四)(多头注意力机制)

​&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《深度学习基础知识》 相关专栏&#xff1a; ⚽《机器学习基础知识》 &#x1f3d0;《机器学习项目实战》 &#x1f94e;《深度学习项目实…

virtualbox 网络设置实现主机和虚拟机互相访问

前言 一般来说&#xff0c;virtualbox 虚拟机的上网模式是 NAT。这样虚拟机可以上网并访问宿主机&#xff0c;但宿主机无法访问虚拟机&#xff0c;也无法 ping 通。下面介绍双网卡模式&#xff0c;实现虚拟机和宿主机能够互相访问 ping 通。 双网卡模式 进入虚拟机的网络设置…

串联超前及对应matlab实现

串联超前校正它的本质是利用相角超前的特性提高系统的相角裕度。传递函数为&#xff1a;下面将以一个实际的例子&#xff0c;使用matlab脚本&#xff0c;实现其校正后的相位裕度≥60。

微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 设置访问Redis密码

微服架构基础设施环境平台搭建 -&#xff08;六&#xff09;Kubesphere 部署Redis服务 & 设置访问Redis密码 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 微服架构基础设施环境平台搭建 -&#xff08;二…

使用CSS3 + Vue3 + js-tool-big-box工具,实现炫酷五一倒计时动效

时间过得真是飞速&#xff0c;很快又要到一年一度的五一劳动节啦&#xff0c;今年五天假&#xff0c;做好准备了吗&#xff1f;今天我们用CSS3 Vue3 一个前端工具库 js-tool-big-box来实现一个炫酷的五一倒计时动效吧。 目录 1 先制作一个CSS3样式 2 Vue3功能提前准备 3…

MySQL--mysql的安装(压缩包安装保姆级教程)

官网下载&#xff1a;www.mysql.com MySQL :: Download MySQL Community Server (Archived Versions) 1.MySQL下载流程&#xff1a; 第一步&#xff1a;点击download&#xff0c; 下滑找到MySQL community&#xff08;gpl&#xff09;Downloads>> 第二步&#xff1a;点…

《小倩》撤档五一,光线动画神话宇宙出师未捷

临近五一假期&#xff0c;光线动画的《小倩》突然宣布撤档&#xff0c;退出了五一档的争夺。 作为光线动画成立以来倾力打造的中国神话宇宙的第一部电影&#xff0c;《小倩》的市场关注度不言而喻&#xff0c;尤其是在今年五一档撞上两部大热日本动画电影&#xff0c;正面交锋…

VPN的基本概念

随着互联网的普及和应用的广泛&#xff0c;网络安全和隐私保护越来越受到人们的关注。在这个信息爆炸的时代&#xff0c;我们的个人信息、数据通信可能会受到各种威胁&#xff0c;如何保护自己的隐私和数据安全成为了一个迫切的问题。而VPN&#xff08;Virtual Private Network…

pytho爬取南京房源成交价信息并导入到excel

# encoding: utf-8 # File_name: import requests from bs4 import BeautifulSoup import xlrd #导入xlrd库 import pandas as pd import openpyxl# 定义函数来获取南京最新的二手房房子成交价 def get_nanjing_latest_second_hand_prices():cookies {select_city: 320100,li…

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…

大珩PPT助手一键颜色设置

大珩PPT助手最新推出的一键设置文字颜色和背景色功能&#xff0c;为用户在创建演示文稿时带来了更便捷、高效的体验。这一功能使用户能够轻松调整演示文稿中文字的颜色和幻灯片的背景色&#xff0c;以满足不同场合和主题的需要。 以下是该功能的几个关键特点和优势&#xff1a…

RAG-Driver: 多模态大语言模型中具有检索增强上下文学习的通用驱动解释

RAG-Driver: 多模态大语言模型中具有检索增强上下文学习的通用驱动解释 摘要Introduction RAG-Driver: Generalisable Driving Explanations with Retrieval-Augmented In-Context Learning in Multi-Modal Large Language Model. 摘要 由“黑箱”模型驱动的机器人需要提供人类…

JAVA实现easyExcel模版导出

easyExcel文档 模板注意&#xff1a; 用 {} 来表示你要用的变量 &#xff0c;如果本来就有"{“,”}" &#xff0c;特殊字符用"{“,”}"代替{} 代表普通变量{.}代表是list的变量 添加pom依赖 <dependency><groupId>com.alibaba</groupId&g…

Docker有哪些常见命令?什么是Docker数据卷?

喜欢就点击上方关注我们吧&#xff01; 哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。上一篇我们介绍了Docker的安装以及腾讯云镜像加速源的配置。本篇将带你学习Docker的常见命令、数据卷及自定义镜像等相关知识。 1、什么是镜像与容器&#xff1f; 利用Docker安装应…

电容的理论基础

目录 1.电容的本质&#xff1a; 2.电容量的大小 2.1电容的单位 2.2电容的决定式 ​编辑3.电容的特点 5.电容器的类型 6.电容实际的电路模型 7.安装方法 ​编辑8.电容值 9.电容的耐压、封装 10.阻抗-频率特性 11.频率特性 12.等效串联电组ESR 13.电容器的温度特性…

MATLAB 数据类型

MATLAB 数据类型 MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名&#xff0c;它就创建变量并分配适当的内存空间。 如果变量已经存在&#xff0c;那么MATLAB将用新内容替换原始内容&#xff0c;并在必要时分配新的存储空间。 例如&#xff0c; Tota…

命令执行。

命令执行 在该项目的readme中&#xff0c;描述了怎么去调用的flink 通过java原生的runtime来调用flink&#xff0c;下一步就是去看看具体的调用过程了&#xff0c;是否存在可控的参数 找到具体提交命令的类方法CommandRpcClinetAdapterImpl#submitJob() 这里要确定command&am…

TiDB 6.x 新特性解读 | Collation 规则

对数据库而言&#xff0c;合适的字符集和 collation 规则能够大大提升使用者运维和分析的效率。TiDB 从 v4.0 开始支持新 collation 规则&#xff0c;并于 TiDB 6.0 版本进行了更新。本文将深入解读 Collation 规则在 TiDB 6.0 中的变更和应用。 引 这里的“引”&#xff0c;…