小编的学习任务很繁重,都快忘记有头条了,所以就很长一段时间不更新头条啦,今天给大家带来一份我在学习过程中对于session的理解,如果有误欢迎指出错误,如果有更好的建议,也欢迎提出
一.域对象的特点--->浏览器发送请求
request 到达Tomcat 解析(请求名 携带参数) (new Request对象),Java中的原生管理方式 每次都new 没有引用指向,最后被GC回收
*session 一次会话 周期是在浏览器和服务器没有断线的过程中,每一个人拥有一个(特点:一定是通过编码来实现的)
session.setAttribute("key",object);
session.getAttribute();
application 全局(上下文)的对象 特点大家公用,Java中的单例管理方式 或者类中static元素
二.模拟场景
游泳馆
游泳馆肯定有储物柜(session)
1.储物柜本身是游泳馆的固定资产
2.某一个具体的小柜子 也不属于某一个人 与人没有对应关系(无状态的)
3.小柜子一旦分配给了某一个人 形成一种对应关系 人不离开游泳馆,关系一直存在(人通过某一个标识找到自己对应的柜子)
4.一旦我离开了 柜子就释放了
5.我的柜子 别人打不开
三.类比session对象的管理机制
1.session对象是服务器管理的
2.session对象应该不止一个
3.每一个人就一个session,管理者一个就够了,里面那个存储session对象的map一个就够了
服务器:
里面应该有一个类----管理session对象的,(下面的代码不能运行,方便更好的理解用的)
public class SessionManager{
//负责管理session 一个对象就够了
//有一个集合 为了存储好多个session对象
private static Map<String 标识,session> sessionMap = new HashMap();
public static HttpSession getSession(String 标识){
return sessionMap.get(标识);
}
}
public class HttpSession{
//一个小柜子 好多个对象
//还有一个集合 小柜子里面的储物格
private Map<String,Object> attributeMap = new HashMap();
//存
public void setAttribute(String key,Object value){
attributeMap.put(key,value);
}
//取
public Object getAttribute(String key){
return attributeMap.get(key);
}
}
4.如果想要使用session对象
HttpSession session = SessionManager.getSession("标识");
session.setAttribute("key",objcet);
Object value = session.getAttribute("key");
四.通过刚才的了解
1.session对象是服务器管理的(session对象存储在服务器端)
2.session对象是无状态的(每一个session对象与浏览器不存在直接的对应关系)
3.session需要一个标识来寻找
标识是谁分配的?---服务器
标识长成什么样?---是一个String(唯一)
标识存储在哪里?---存储在浏览器端的
什么时候存进去的?---标识是服务器分配的 需要存储在浏览器端,服务器需要将标识传递给浏览器,服务器在第一次给浏览器回写响应的时候带回来的 (标识)
4.标识具体存储在哪里?
Cookie(执行时是一个对象 key value) 可以永久的存储在文件中
0.服务器需要先启动(携带着项目-->有好多资源Servlet JSP Filter)
1.浏览器主动发送请求(第一次请求时没有标识)
2.服务器解析请求 根据请求找资源 响应信息给回浏览器的时候String
第一次给予响应信息<html>图片 按钮 表格</html> + 标识
3.浏览器需要解析回来的响应信息
String(展示+标识) 标识存起来(以后每一次请求都带着)