`
oxidy
  • 浏览: 166054 次
  • 性别: Icon_minigender_1
  • 来自: 吉林长春
社区版块
存档分类
最新评论

读书《精通Struts:基于MVC的Java Web设计与开发》之一

阅读更多

孙卫琴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

session

request

page

 

     注意:上图是根据4种范围的生命周期的长短,直观地比较了它们的大小。但并不意味着着几种范围之间存在包含关系

 

当客户第一次访问Web应用中支持会话的某个网页时,就会开始一个新的HTTP会话,Servlet容器为这个会话创建一个HttpSession对象。接下来,当客户浏览这个Web应用的不同网页时,始终处于同一个会话中。会话拥有特定的生命周期。在以下情况中,会话将结束生命周期,Servlet容器会将HTTP会话所占用的资源释放掉:

  • 客户端关闭浏览器
  • 会话过期
  • 服务器端调用了HttpSession的invalidate()方法

把共享数据保存在session范围内,有助于服务器在同一个HTTP会话中跟踪用户的状态,例如在购物网站中,可以跟踪用户购物车的状态。但是在session范围内保存大量的共享数据,会消耗大量的内存资源。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics