Servlet 04 笔记

Servlet 04


会话跟踪 ( 状态管理 )

HTTP是无状态的协议. 我们客户端与服务器的每一次交流  ,服务器都没有记忆能力.
学习会话跟踪技术 , 可以让我们的服务器 在与客户端 的一场会话中, 拥有记忆能力.

存在两种技术实现:
	1.	Cookie	:	将客户端与服务器交流时 产生的状态, 存储在客户端中.
	2.	Session	:	将客户端与服务器交流时 产生的状态, 存储在服务器中.
Cookie ******
技术实现原理:
	当服务器给浏览器响应时,  创建一个Cookie , 并将Cookie添加到响应头部.
	浏览器根据HTTP协议约定, 接收到Cookie , 将Cookie存储在一个文本文件中(.txt).
	当浏览器下一次访问 这个服务器时, 会将文本文件中的Cookie取出, 发送给服务器.

	必须是相同的服务器 且 路径相同时才会发送.
创建Cookie
一个Cookie就是一个键值对. 在Java中是一个描述键和值的类.

创建对象的格式:
	Cookie  cookie = new Cookie(String key,String value);
	

注意:	在tomcat8.5版本之前, Cookie无法存储中文的.
将Cookie加入到 响应头部
格式:
	response.addCookie(Cookie cookie);

注意:	如果同一个服务器 ,同一个路径存储的两个Cookie 的键相同, 则旧的Cookie 会被覆盖.
如果从 请求头 获取Cookie
格式:
	Cookie[] cookies = request.getCookies();

注意:	如果从未存储过, 则获取的数组是null
Cookie的常用操作:
1.	取出Cookie中的键
		String name = cookie.getName();

2.	取出Cookie中的值
		String vlaue = cookie.getValue();

3.	Cookie的存活时间问题
		设置的格式:
		cookie.setMaxAge(int 秒);

		值的含义:
			正数:	存活的秒数
			负数:	默认值-1. 负数表示浏览器关闭时删除.
			0  : 	立即删除.
Cookie的路径问题
我们在使用Cookie时, 经常需要关注Cookie的路径问题. 

为了避免此问题, 我们一般设置Cookie的路径为 / 

格式:
	cookie.setPath("/");
Cookie 的优缺点 *****
缺点:
	1.	Cookie存储的数据类型只能是String
	2.	数据存储在了客户端的文本文件中, 不安全 . 
	3.	存储的数据大小 不能超过4kb
	4.	在tomcat8.5版本之前 无法存储中文
	5.	太依赖用户的浏览器设置, 用户可以主动删除Cookie  甚至禁用Cookie

优点:
	数据存储在浏览器中, 减少了服务器的压力.
Session *****
HttpSession 可以看做一个Map集合, 存储的键是string , 存储的值是Object.

技术原理:
	当浏览器访问服务器时, 服务器可以选择为浏览器创建一个新的HttpSession对象.
	HttpSession对象被创建时, 会产生一个id , 我们称其为SessionID (Java程序员又称其为:JSESSIONID)
	tomcat会自动将这个id 封装为一个Cookie , 将这个Cookie发送给浏览器.

	当浏览器再次访问服务器时, 会携带这个包含id的cookie.
	服务器接收到这个cookie后, 就取出id , 并根据这个id 找到对应的HttpSession对象 供程序员调用.
如何得到session对象
格式1. (推荐)
	//内部代码是 调用了一参的getSession方法 , 传了一个true
	HttpSession session = request.getSession();

格式2.
	HttpSession session = request.getSession(boolean isNew);
	参数:
		true	:	根据当前浏览器传来的sessionID 查找一个session对象, 并返回
					如果sessionid不存在 , 则创建Session并返回						

		false	:	根据当前浏览器传来的sessionID 查找一个session对象, 并返回
					如果sessionid不存在 , 则返回null

#####session的常用方法

1.	设置 或 替换数据
		session.setAttribute(String key,Object value);
2.	获取数据
		Object value = session.getAttribute(String key);
3.	移除数据
		session.removeAttribute(String key);

4.	销毁session 
		//我们使用此方法,  做的最多的事情就是 退出登录.
		session.invalidate();

设置Session的销毁时长

服务器默认会话时长为30分钟 . 
当浏览器最后一次访问30分钟后, 服务器删除对应的Session.

为了让session的存活时长, 更适用于我们的项目.  我们可以调整全局session时长 或 单独设置某个session的时长.

方式1.
		设置全局的session时长.
		独立环境:
			修改tomcat/conf/web.xml			
		开发环境:
			修改Servers项目中的 web.xml文件夹

		更改web.xml中的session-config节点:
			<session-config>
				<session-timeout>分钟数字</session-timeout>
			</session-config>


方式2.	
		设置某个项目的session时长
			打开web-inf/web.xml , 加入如下节点:	
			<session-config>
				<session-timeout>分钟数字</session-timeout>
			</session-config>

方式3.
		通过Java代码, 设置某一个session的存活时长.
			session.setMaxInActiveInterval(int 秒);
Session 优缺点 *****
优点:
	1.	数据存储在服务器中, 安全.
	2.	数据存储类型为Object , 表示可以存储万物.
	3.	session存储的数据大小是 无限制的.

缺点:
	数据存储在服务器中, 当用户量较大时, 极易耗尽服务器性能. 导致服务器崩溃.
Cookie 和 Session 的使用
我们学习Cookie和session 是为了让服务器有记忆能力.
需要存储数据时. 如果数据不是为了让服务器记住客户端, 那么还是要优先考虑数据库存储.
1.	打印HTML标签
		-	判断是否存在cookie:   键:imgid1
				存在:	打印红色心的 img标签
				不存在:  打印黑色心的 img标签
		-	判断是否存在cookie:   键:imgid2
				存在:	打印红色心的 img标签
				不存在:  打印黑色心的 img标签

2.	HTML标签中, 使用超链接 向s2.do 发送参数 imgid

3.	s2.do  接收参数imgid

4.	获取之前存储的所有的Cookie , 遍历比较Cookie的键 

5.	根据比较的结果, 判断s2.do执行的逻辑 是 关注 还是 取消关注.

6.	关注:	创建Cookie ,存储30天
	取消关注:创建Cookie , 存储0秒, 覆盖原30天的Cookie

7.	重定向到主页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值