session,cookie和servletcontext

文章目录

  • ServletContext'
    • 特性:共享数据
  • Session
  • Cookies

session,cookie和servletcontext_第1张图片

ServletContext’

范围:服务器请求到服务器关闭,有且只有一个
web容器启动时,会为每个web程序创建一个对应的ServletContext对象,代表了当前的web应用
web容器:是一种服务程序,在服务器每个端口就有一个提供相应服务的程序,如tomcat

特性:共享数据

session,cookie和servletcontext_第2张图片
每个Servlet都有独立的URL,它们的数据都存放在ServletContext中,无论是A还是B存储的数据都可以相互使用

		//1.
        ServletContext servletContext = this.getServletContext();
        //2.
        ServletContext servletContext1 = this.getServletConfig().getServletContext();
        //3.
        ServletContext servletContext2 = req.getSession().getServletContext();
//设置参数
servletContext.setAttribute("key",value);
//接收参数
servletContext.getAttribute("key"); 

Session

范围:一次会话(浏览器发送请求到浏览器关闭)
Session是服务器为每个访问这个服务器的客户端用户创建的一个容器。这个容器中存储的数据能够在多个request之间实现共享。而且,这个容器只属于当前这个用户。
表面上,我们说Session容器是属于某一个用户。其实在会话过程中,只有客户端(浏览器)和服务器两个角色。所以,Session容器标识的不是用户,而是当前用户正在使用的浏览器。浏览器与服务器交流是通过给服务器发送请求实现的,浏览器的每次请求中如果都有一个相同的标记用来标记session。服务器就能够识别这个用户了。
服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
SessionId保存方式:生成session的这个servlet对浏览器进行响应后,浏览器会以cookie的形式将该session对应的id存放在浏览器
声明方式:

HttpSession session = req.getSession();
//设置参数
session.setAttribute("key",value);
//接收参数
session.getAttribute("key");

Cookies

Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。但是我们一般认为cookie是不可靠的,session是可靠的,但是目前很多著名的站点也都以来cookie。有时候为了解决禁用cookie后的页面处理,通常采用url重写技术,调用session中大量有用的方法从session中获取数据后置入页面。
Cookies声明

Cookie cookie = new Cookie("key",value);
resp.addCookie(cookie);
//获取Cookie
Cookie cookie = req.getCookies();

你可能感兴趣的:(笔记,session,cookie,java)