孙卫琴Java系列
共享数据在Web应用中的范围:
在web应用中,如果某种数据需要被多个Web组件共享,可以把这些共享数据存放在特定的范围内。
共享数据有4种存在范围:
- page:共享数据的有效范围是用户请求访问的当前JSP页面。
- request:共享数据的有效范围为“用户请求访问的当前Web组件,以及和当前Web组件共享同一个用户请求的其他Web组件”。如果用户请求访问的是JSP网页,那么该JSP网页的< %@include > 指令以及< forward > 标记包含的其他JSP文件也能访问共享数据。request范围内的共享数据实际上存放在HttpServletRequest对象中。
- session:共享数据存在于整个HTTP会话的生存周期内,同一个HTTP会话中的Web组件共享它。session范围内的共享数据实际上是存放在HttpSession对象中的。
- Application:共享数据存在于整个Web应用的生命周期内,Web应用中的所有Web组件都能共享它。共享数据实际上存放在ServletContext对象中。
Application
|
注意:上图是根据4种范围的生命周期的长短,直观地比较了它们的大小。但并不意味着着几种范围之间存在包含关系
当客户第一次访问Web应用中支持会话的某个网页时,就会开始一个新的HTTP会话,Servlet容器为这个会话创建一个HttpSession对象。接下来,当客户浏览这个Web应用的不同网页时,始终处于同一个会话中。会话拥有特定的生命周期。在以下情况中,会话将结束生命周期,Servlet容器会将HTTP会话所占用的资源释放掉:
- 客户端关闭浏览器
- 会话过期
- 服务器端调用了HttpSession的invalidate()方法
把共享数据保存在session范围内,有助于服务器在同一个HTTP会话中跟踪用户的状态,例如在购物网站中,可以跟踪用户购物车的状态。但是在session范围内保存大量的共享数据,会消耗大量的内存资源。