一、session简介

session 在网络中称之为对话。由于http协议是一种无状态协议,也就是一个客户向服务器发送请求,服务器接收请求,并返回响应后,该连接就结束了了,而服务器并保存相关信息。为了弥补这一缺点,http协议提供了Session。通过session可以在应用程序的web页面进行间接跳转时,保存用户的状态,使整个会话一直存在下去,知道关闭浏览器。但是一个会话中,客户端长时间不向服务器发出请求,session对象将会自动消失。这个时间取决于服务器,例如:tomcat服务器默认为30分钟。这个时间可以在程序中修改。

可以将会话理解为打一次电话的过程。通话从拿起电话起或手机拨号开始,一直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。

1.1、创建以及获取客户的会话

通过session对象可以存储或读取客户的信息,如用户信息以及购物信息。

1.1.1、存储session对象 语法:

session.setAttribute(String name ,Object obj);

name:用于指定作用域在session范围内的变量

obj:保存session范围内的对象

1.1.2、获取session 语法

session.getAttribute(String name);

name:指定保存session对象范围内的关键字

1.1.3、从会话中移动指定的绑定对象

对于存储在session会话中的对象,如果想将其从session对象会话中移除,可以使用session对象中的removeAttribute()方法,语法:

session.removeAttribute(String name);

name : 用于指定作用域在session范围内的变量名。一定要保证该变量在session范围内有效否则会抛出异常。

1.2、销毁session对象

虽然客户端长时间不向服务器发送请求后,session对象会自动消失,但对于某些时时统计在线人数的网站,每次等session过期后,才能统计出正确的数据,这是远远不够的,所以需要手动进行session销毁,语法:

session.invalidate();

1.3、会话超时管理

在应用session对象时应该注意session的生命周期。一般来说session的生命周期为20~30 分钟

。当用户首次访问时将产生一个新的会话,以后服务器会记住这个会话状态,当会话生命周期超时或服务器强制是会话失效时,这个session就不能使用了。

常用的会话超时的方法:

getLastAccessedTime():返回客户端最后一次与会话相关联的请求时间。

getMaxInactiveInterval();以秒为单位返回一个会话内两个请求最大的时间间隔

SetMaxInactiveInterval();设置session对象的有效时间。

二、application对象

application对象用于保存所有应用程序中的公有数据。他在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享application对象。与session对象相比application对象的生命周期更长,类似于系统的全局变量。

2.1、访问应用程序初始化参数

application对象提供了对应用程序初始化参数的访问方法。应用程序初始化参数在web.xml文件中进行设置,web.xml文件位于web应用所在目录下大雾WEB-INF子目录中。在web.xml文件中通过<content-param>标记配置应用程序初始化参数。

application提供两种访问应用程序初始化参数的方法:

application.getInitParameter(String name); 该方法返回已命名的参数值

name:用于指定的参数名

application.getAttributeNames(); 该方法返回所有已定义的应用程序初始化参数名的枚举

2.2、管理应用程序环境属性

与session对象相同,也可以在application对象中设置属性。与session对象不同的是,session只是在当前客户的会话范围内有效,当超过保存时间,session对象会被收回;而application对象在整个应用区域中有效,常用的方法如下:

getAttributeNames() 获取到application对象所有的属性名。

getAttribute(String name) 从application 对象中获取指定的对象名

setAttribute(String key,Objrct obj) 使用指定名称和指定对象在application对象进行关联

removeAttribute(String name)从application 对象中去掉指定的名称的属性。