.HttpSession概述
首先,HttpSession是javax.servlet.http包下的一个接口。从名字来看,我们可以知道HttpSession与Http协议有一定的关系,但是它并不是由Http协议定义的,而是由Javaweb提供。我们可以在JavaEE api中查看它的详细信息。
其次,HttpSession是用来进行会话跟踪的接口,我们之前也学过另外一个与会话相关的技术Cookie。在
Cookie介绍中我们了解到,Cookie是由Http协议制定的,在请求信息和响应信息中分别对应了Cookie请求头和Set-Cookie响应头,并且Cookie是由服务器创建,保存在客户端。而HttpSession对象也是由服务器创建,但是与Cookie不同的是,它保存在服务器端。
HttpSession对象是Servlet的三大域对象之一,其他两个域对象是request和application。application的类型是ServletContext。这三个域中,request的域范围最小,它的域范围是整个请求链,并且只在请求转发和包含时存在;session域对象的域范围是一次会话,而在一次会话中会产生多次请求,因此session的域范围要比request大;application的域范围是最大的,因为一个web应用只有唯一的一个application对象,只有当web应用被移出服务器或服务器关闭它才死亡,它的域范围是整个应用。
2.HttpSession相关知识
在HttpSession概述中,我们提到它是用来进行会话跟踪的接口。会话是一个用户对服务器的多次连贯性的请求,所谓连贯性请求是指该用户的在多次请求的过程中没有关闭浏览器。而会话范围就是指某个用户从首次访问服务器开始到该用户关闭浏览器为止。
服务器会为每个用户创建一个session对象,当用户关闭浏览器,再次打开浏览器访问服务器时,服务器会为该用户创建一个新的session对象。当然,服务器不会只有一个用户访问,当多个用户访问服务器,服务器会为创建多个session对象,这些session对象都保存在一个Map中,而这个Map被称之为session缓存。当服务器关闭,该缓存就会被清空。
session底层是依赖Cookie的,如果浏览器禁用Cookie则session会依赖URL重写。详情我们会在后面介绍。
如何获取HttpSession对象?在服务器端,例如在Servlet中,我们通过request对象的getSession()方法获取服务器为当前用户创建的session对象,即:HttpSession session=request.getSession()。而在jsp中,session是jsp的内置对象,不用获取就可以直接使用。
我们知道每一个域对象都会有以下三个方法,HttpSession也不例外:
- void setAttribute(String name,Object value):向域中添加域属性;
- Object getAttribute(String name):从域中获取指定名称的属性值;
- Void removeAttribute(String name):移出域中指定名称的域属性。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee