区别与联系
补充知识:
- 浏览器向web容器(即web服务器)发出HTTP请求,web容器创建servlet,然后将请求信息封装进request对象并创建response空对象(由web容器通过实现HttpServletRequest等类创建),最后调用servlet类的service方法将request和response对象写入servlet。
- web容器只有首次访问才创建servlet
- 浏览器获取响应信息可以类比第一条。servlet处理信息后将响应信息写入response的空对象,之后传给web容器,然后给浏览器发送响应HTTP。
- servlet的init方法只执行一次,说明servlet在内存中只存在一个对象。
- request在每次请求时被创建;当使用sendredirct重定向时,request对象被销毁,但使用dispatcher转发时,request并未被销毁而是传递。
区别:
- Cookie作用于客户端,每个cookie的最大文本限制为4kb,看cookie源码时发现cookie成员变量中有name和value两个成员变量(如下),推测一个cookie只能存储一对键值对。
public class Cookie implements Cloneable, Serializable {
private static final CookieNameValidator validation;
private static final long serialVersionUID = 1L;
private final String name;
private String value;
private int version = 0;
private String comment;
private String domain;
private int maxAge = -1;
private String path;
private boolean secure;
private boolean httpOnly;
//成员方法
}
- Cookie是一个接口实现类,实现了Cloneable, Serializable接口,可以直接创建cookie对象,cookie构造函数只有一个有参构造,必须包含name和value两个值。
- cookie生命周期可以通过setMaxAge方法设定,默认为浏览器关闭时销毁
- Session作用于服务器,servlet API中并没有对session进行文本限制
- HttpSession是一个接口,而不是接口实现类。session通过request.getSession()方法获取Session对象。
- session默认关闭浏览器或默认时间(tomcat 30分钟)销毁,可以通过session.setMaxInactiveInterval方法设置失效时间。
- 服务器正常关闭时,session会自动序列化到磁盘上,当服务器启动时会再从磁盘读取该session。
联系
- 两者都是按键值对的方式进行存储,即key,value方式
Cookie
cookie如何存储数据?
因为cookie只有一个有参构造,所以可以通过构造方法存入数据。
cookie如何在一次会话中反复传递数据?
通过response.addCookie(cookie);方法将cookie通过response响应对象传给浏览器,并通过Cookie[] cookies=req.getCookies();方法获取cookie数据。
cookie如何获取指定键名的值?
可以先获取cookie数组,通过cookie.getName方法获取键名,遍历数组,找到对应键名的cookie对象,通过getValue方法即可获得指定键名的值。
补充:cookie也可以通过setter方法修改键值,但键名是final类不可修改。
Session
一般session最常用到的数据操作方法就是下面几个:
- request.getSession() 获取session对象
- Object getAttribute(String name);获取对应键名的键值
- void setAttribute(String name, Object value); 设置键值对
- void removeAttribute(String name); 移除键值对
暂时想到的就这么点。
本文深入解析了Cookie与Session的工作原理,对比了它们在客户端与服务器端的作用,详细阐述了各自的生命周期、存储方式及数据传递机制。
1678

被折叠的 条评论
为什么被折叠?



