百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

重走Java编程路:JSP Cookies 处理

wxin55 2024-11-01 14:29 8 浏览 0 评论

Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持。

通常有三个步骤来识别回头客:

· 服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。

· 浏览器在本地机中存储这些信息,以备不时之需。

· 当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。

本章节将会传授您如何去设置或重设cookie的方法,还有如何访问它们及如何删除它们。

Cookie剖析

Cookies通常在HTTP信息头中设置(虽然JavaScript能够直接在浏览器中设置cookies)。在JSP中,设置一个cookie需要发送如下的信息头给服务器:

正如您所见,Set-Cookie信息头包含一个键值对,一个GMT(格林尼治标准)时间,一个路径,一个域名。键值对会被编码为URL。有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个cookie。

如果浏览器被配置成可存储cookies,那么它将会保存这些信息直到过期。如果用户访问的任何页面匹配了cookie中的路径和域名,那么浏览器将会重新将这个cookie发回给服务器。浏览器端的信息头长得就像下面这样:

JSP脚本通过request对象中的getCookies()方法来访问这些cookies,这个方法会返回一个Cookie对象的数组。

Servlet Cookies 方法

下表列出了Cookie对象中常用的方法:

序号方法 & 描述
1public void setDomain(String pattern)设置cookie的域名,比如w3cschool.cn
2public String getDomain()获取cookie的域名,比如w3cschool.cn
3public void setMaxAge(int expiry)设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间
4public int getMaxAge()获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止
5public String getName()返回 cookie的名称,名称创建后将不能被修改
6public void setValue(String newValue)设置 cookie的值
7public String getValue()获取cookie的值
8public void setPath(String uri)设置cookie 的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录
9public String getPath()获取cookie 的路径
10public void setSecure(boolean flag)指明cookie是否要加密传输
11public void setComment(String purpose)设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
12public String getComment()返回描述cookie目的的注释,若没有则返回null

使用JSP设置Cookies

使用JSP设置cookie包含三个步骤:

(1)创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。

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

请务必牢记,名称和值中都不能包含空格或者如下的字符:

[ ] ( ) = , " / ? @ : ;

(2) 设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。

cookie.setMaxAge(60*60*24);

(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。

response.addCookie(cookie);

实例演示

将上面两个文件放在<Tomcat安装目录>/webapps/ROOT目录下,然后访问http://localhost:8080/hello.jsp,将会得到如下输出结果:

试着输入First Name和Last Name,然后点击提交按钮,它将会在您的屏幕中显示first name和last name,并且设置first name和last name两个cookie,下一次点击提交按钮时会发给服务器。

使用JSP读取Cookies

想要读取cookies,您就需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。

<h3实例演示< h3="">

让我们来读取上个例子中的cookies。

如果您把first name cookie设置成"John",last name设置成"Player",访问 http://localhost:8080/main.jsp,将会得到如下输出结果:

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

使用JSP删除Cookies

删除cookies非常简单。如果您想要删除一个cookie,按照下面给的步骤来做就行了:

· 获取一个已经存在的cookie然后存储在Cookie对象中。

· 将cookie的有效期设置为0。

· 将这个cookie重新添加进响应头中。

实例演示

下面的程序删除一个名为"first_name"的cookie,当您下次运行main.jsp时,first_name将会为null。

访问它,将会得到如下输出结果:

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

再次访问http://localhost:8080/main.jsp,将会得到如下结果:

Found Cookies Name and ValueName : last_name, Value: Player

您也可以手动在浏览器中删除cookies。点击Tools菜单项,然后选择Internet Options,点击Delete Cookies,就能删除所有cookies了。

相关推荐

Java中List 和 Map、Set 的区别(list和set和map)

hello,大家好,我是霖仔java集合的大家了解,我再给大家说一下他们的区别,希望能够帮助到大家结构特点:List和Set是存储单列数据的集合,Map是存储键和值这样的双列数据的集合;Lis...

Java 集合框架全面解析:选对数据结构,提升开发效率

上一章我们详细介绍了各种常用的数据结构情况(参考:数据结构复杂度全览:如何选择最优结构?),本文结合关键数据结构,从列表(List)、队列(Queue)、集合(Set)、映射(Map)四个维度,深入解...

LinkedList竟然比ArrayList慢了1000多倍?(动图+性能评测)

数组和链表是程序中常用的两种数据结构,也是面试中常考的面试题之一。然而对于很多人来说,只是模糊的记得二者的区别,可能还记得不一定对,并且每次到了面试的时候,都得把这些的概念拿出来背一遍才行,未免有些麻...

LinkedList 底层源码深度解析(linkedlist底层数据结构)

目录1.引言2.LinkedList概述2.1类继承体系图2.2各个接口作用3.与ArrayList的对比4.底层数据结构5.核心方法源码解析5.1add()方法5.2a...

List的用法和实例详解——Java进阶知识讲义系列(四)

序欢迎来到全网最完整的Java进阶知识系列教程!!!每天定时更新!!!本期是Java进阶知识系列的第四讲,将分享Java常用的数据容器——集合类。集合类也分很多类型,比如:List、Set、Map、Q...

Rust高效集合操作(rust基本操作)

集合的分类Rust的集合类型主要分布在标准库的std::collections模块中,同时也包括语言内置的数组和字符串类型序列容器序列容器维护元素的顺序,适合需要按索引访问或顺序遍历的场景向量(...

Java八股文:核心知识点梳理(java八股文是啥)

一、Java基础1.Java基本数据类型8种基本类型:整型:byte(1),short(2),int(4),long(8)浮点型:float(4),double(8)字符型:char(2)布...

面试题:ArrayList和LinkedList有什么区别?

面试题

为什么我不推荐研发人员使用 LinkedList?

在Java集合框架中,LinkedList作为List的实现之一,经常被认为是ArrayList的替代方案。然而,在大多数实际场景下,我们并不推荐使用LinkedList,原因主要集中...

ArrayList 、 LinkedList、Vector的区别

ArrayList、LinkedList、Vector的区别如下:ArrayListLinkedListVector结构动态数组双向链表动态数组是否线程安全否否是效率遍历查找快,插入删除慢插入删除...

(2020 )Java最新面试笔试题答案解析(一)

Java中的集中基本数据类型是什么?各占用多少字节?【数值型】—(整数类型)byte(1字节)short(2字节)int(4字节)long(8字节)拓展:Java中的数据类型除了上面的基本...

超简单五步实现Linux虚拟机CentOS 7系统Root密码忘记重置

环境:CentOS7.5重置root密码:1.CentOS7虚拟机开机,将鼠标光标移动至虚拟机内。2.在虚拟机中使用键盘上↑和↓键将选择行设置为第一行(背景高亮即为选中),按下键盘上的e,进...

吊轨门和推拉门哪个好?北京今朝区别介绍看完不入坑

厨房到底使用什么门好?相信这是大多数业主都比较抓狂的事情,其实在装修中材料的选择最终还是要依据空间而定,那么吊轨门和推拉门哪个好呢?下面就跟随北京装修网一起来看看吧!吊轨门与推拉门介绍吊轨门吊轨门的特...

〖省钱宝典〗不花冤枉钱,少走弯路!居家中推拉门如何设计?

想要空间最大程度的显大?想要充足的光线?又想拥有合理的区域划分?那么推拉门是你绝对不能错过的好选择。推拉门的设计轻盈简洁,绝对是室内每个空间的福音。它不仅可以最大化地节省空间,方便了居室的功能划分和利...

吊趟门与推拉门有什么区别?(吊趟门贵还是推拉门贵)

吊趟门与推拉门的区别很多人在购买的时候并不清楚,有些客人甚至根本分不清吊趟门和推拉门,今天小编就给大家讲讲吊趟门与推拉门的相关内容,看看吊趟门与推拉门的区别有哪些?1、推拉门采用以门扇下滑轮为主支撑点...

取消回复欢迎 发表评论: