一、servlet中三个不同的数据存储范围
servlet中的request对象、session对象和servletContext对象是三个不同的存储数据的作用域。三者都提供了相同的操作属性的方法:
setAttribute(String name,Object object)
getAttribute(String name)
removeAttribute(String name)
但是三者存储数据的作用域不同:
request对象是一个生命很短的请求对象,它保存的数据只在下一个request对象中可以取得到,所以常用在转发请求时共享数据。
session对象是一个用户会话对象,当客户机首度访问服务器时session对象第一次创建,产生的数据会一直保存到这个session对象因超时或客户端关闭之前,所以一个session一般用于某一用户的相关数据存储。
servletContext对象代表了servlet的上下文环境,只要有web程序在运行中,这个对象就会一直有效,它存储的数据当然也会同时有效,所以servletContext常用于存放web程序的全局性数据
这三个对象范围内的数据有不同的生命周期:
request中的数据,只在一个请求应答的流程中有效
session中的数据对应客户机的浏览器进程,客户机的浏览器不关闭,服务器session中的数据就有效
servletContext中的数据随服务器的运行而存在
二、session分析
http是一种无状态协议,当客户机与服务器收发完页面信息之后,连接的socket对象会断开,而在web应用中常需要让服务器记住客户机的状态,以实现客户机与服务器的交互,这就需要用到session机制。
用户首次向站点发送请求时,会创建一个新的会话对象,即一个session,并分配一个唯一的sessionID给它,这个sessionID会作为请求的一部分,匹配用户与session对象。session机制让servlet能够跨多个请求维护状态和用户信息。servlet可以在session对象中添加属性和读取存储的属性值。
HttpServletRequest接口中有两个方法用于获取会话:
HttpSession getSession()创建一个新的会话,前提是当前没有与请求关联的会话
HttpSession getSession(boolean create)如果布尔值为true 且当前没有与请求关联的会话,则使用 getSession(boolean create) 创建会话。如果布尔值为false,如果没有与当前请求关联的会话,则返回null
session对象中添加、获取和删除java对象的三个方法
public void setAttribute(String name,Object value);
此方法用于在session中放入关联指定名字的对象
public void getAttribute(String name);
用于取得指定名字的对象
public void removeAttribute(String name);
用于删除指定名字的对象
session的关闭
session会由于在服务器端超时而自动无效
超时的时间设置有两种方式
一种是在session对象上调用setMaxInactiveInterval(int seconds)方法设置一个以秒为单位的超时时间
一种是在web.xml的<session-timeout>元素中设置以分钟为单位的超时时间
另外程序调用HttpSession.invalidate()方法或者服务器端的进程被停止也会关闭session
servlet中的request对象、session对象和servletContext对象是三个不同的存储数据的作用域。三者都提供了相同的操作属性的方法:
setAttribute(String name,Object object)
getAttribute(String name)
removeAttribute(String name)
但是三者存储数据的作用域不同:
request对象是一个生命很短的请求对象,它保存的数据只在下一个request对象中可以取得到,所以常用在转发请求时共享数据。
session对象是一个用户会话对象,当客户机首度访问服务器时session对象第一次创建,产生的数据会一直保存到这个session对象因超时或客户端关闭之前,所以一个session一般用于某一用户的相关数据存储。
servletContext对象代表了servlet的上下文环境,只要有web程序在运行中,这个对象就会一直有效,它存储的数据当然也会同时有效,所以servletContext常用于存放web程序的全局性数据
这三个对象范围内的数据有不同的生命周期:
request中的数据,只在一个请求应答的流程中有效
session中的数据对应客户机的浏览器进程,客户机的浏览器不关闭,服务器session中的数据就有效
servletContext中的数据随服务器的运行而存在
二、session分析
http是一种无状态协议,当客户机与服务器收发完页面信息之后,连接的socket对象会断开,而在web应用中常需要让服务器记住客户机的状态,以实现客户机与服务器的交互,这就需要用到session机制。
用户首次向站点发送请求时,会创建一个新的会话对象,即一个session,并分配一个唯一的sessionID给它,这个sessionID会作为请求的一部分,匹配用户与session对象。session机制让servlet能够跨多个请求维护状态和用户信息。servlet可以在session对象中添加属性和读取存储的属性值。
HttpServletRequest接口中有两个方法用于获取会话:
HttpSession getSession()创建一个新的会话,前提是当前没有与请求关联的会话
HttpSession getSession(boolean create)如果布尔值为true 且当前没有与请求关联的会话,则使用 getSession(boolean create) 创建会话。如果布尔值为false,如果没有与当前请求关联的会话,则返回null
session对象中添加、获取和删除java对象的三个方法
public void setAttribute(String name,Object value);
此方法用于在session中放入关联指定名字的对象
public void getAttribute(String name);
用于取得指定名字的对象
public void removeAttribute(String name);
用于删除指定名字的对象
session的关闭
session会由于在服务器端超时而自动无效
超时的时间设置有两种方式
一种是在session对象上调用setMaxInactiveInterval(int seconds)方法设置一个以秒为单位的超时时间
一种是在web.xml的<session-timeout>元素中设置以分钟为单位的超时时间
另外程序调用HttpSession.invalidate()方法或者服务器端的进程被停止也会关闭session