JSP内置对象——session对象

举个购物流程的例子:

这整个购物过程,它是属于一次回话。那么这个session是保存在服务器内存当中,并且它保存着不同用户对应的session,一个用户对应一个session。看下面这幅图:

从图中可以看出,我们的session是保存在服务器当中的,保存着3个session,这三个session对象跟用户客户端是以一一对应的。
接下来再看一下session对象的一些相关说明:

Session对象呢,也是我们JSP的一个内置对象,它在用户第一次访问JSP页面的时候,就会自动创建,完成一次客户端与服务器之间的会话管理。那么这个Session的生命周期呢,从用户打开浏览器开始和服务器的一个会话,到关闭浏览器,那么整个这个期间都会称为叫做一个会话,那么当用户访问服务器的时候,可能会在多个页面切换,那么服务器就需要有一种办法去保存用户的状态,这个时候就可以使用Session对象,那么也就是说,Session对象是保存用户状态的一种机制。然后看一下Session对象有哪些常用的方法:

下面通过一个具体的实例来说明下,这些方法的如何使用:

运行结果:

ok,没有问题,这些参数都获取得到了。接下来我在session_page1.jsp中做一个超链接,跳到session_page2.jsp页面。代码如下:
sesson_page1.jsp:

sesson_page2.jsp:

运行结果:


也没问题,从session_page1.jsp页面和session_page2.jsp页面的Session的ID可以看出,这两个页面是属于同一个Session。也就是说,这个Session它从客户端打开浏览器就建立了和服务器的一个会话,直到用户把本次会话相关的所有的浏览器都关闭了,才代表它本次会话结束了。当然了,一个Session也有它自己的生存周期,比方说用户停留在一个页面长时间没有任何的操作,它就会提示这个页面已经过期了,同样也就意味着这个会话结束了。
再来看下另一个方法:getValueNames():
先在session_page1中多设置几个属性:


getValueNames()方法是返回一个所有Session属性名称的数组,所以这里通过遍历的形式进行了打印,运行结果如下:


ok,也没有问题。同样,我们可以设置这个Session的生存期限,我们可以使用setMaxInactiveInterval()方法去设置,(单位是秒),比如我们设置10秒,那么这个Session过10秒就过期了,当这时候再打开一个页面呢,实际上就创建了一个新的Session。
比如说我们在session_page1.jsp当中加上一句代码,如下:

运行结果:


可以看到,当session_page1.jsp页面打开后,停留10秒钟后再点击,跳转到的session_page2.jsp页面后,Session的ID已经不一样了,也就是说之前的Session已经过期了,已经被创建了一个新的Session。因为是创建爱的新的Session,所以从上个页面Session保存的用户名和属性,也已经也获取不到了。
Session的生命周期经过以下几个阶段如下:



接下来,举一些实例来讲下这个Session生命周期的这三个阶段。
现在我们有“session_page1.jsp”和“session_page2.jsp”两个界面如下:
session_page1.jsp:

session_page2.jsp:

运行:

现在找到我们在浏览器输入“http://localhost:8080/manager/html”进入Tomcat后台管理,没有Tomcat账号密码的,需要先到tomcat安装目录“conf”文件夹下的tomcat-users.xml文件里添加一个账号和密码,例如以下所示:

进入后找到我们部署的项目:

这上面可以看到,我们活动的会话,点击这个“3”数字,

发现,这个Session Id跟我们之前session_page1.jsp页面获取到的ID一模一样,那现在我先来测试第一种情况“在某次会话中通过超链接打开的新页面属于同一次会话”。操作如下:


发现这个session id 是完全相同的,符合这种情况。
还有一种情况,现在我测试“当前会话界面没有完全关闭,重新打开新的浏览器窗口访问同一项目资源时,属于同一次会话”,操作如下:
我现在把刚刚打开的session_page2.jsp页面关了,重新打开一个浏览器,还是单独输入访问session_page2界面。输入“http://localhost:8080/session_page2.jsp”后发现,显示的SessionID仍然不变。
第三种情况是“本次会话的所有页面都关闭的情况下,再重新访问某个JSP或者Servlet时会创建新的会话。”
注意:原有会话仍存在,但只是这个旧的SessionId仍存在于服务器端,但再也没有客户端会携带它然后交予服务器端去校验了。
JSP内置对象——session对象的更多相关文章
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- JSP内置对象——session
sessionsession表示客户端与服务器的一次会话Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所进过的这段时间,也就是用户浏览这个网站所花费的时间从上述定义中可以看 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象有哪些呢?
内置对象 request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
- Java遇见HTML——JSP篇之JSP内置对象(上)
一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- jsp内置对象和el表达式
九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真 ...
随机推荐
- gvim配置相关
用 vundle 来管理 vim 插件(包含配置文件vimrc和gvimrc) gvim插件管理神器:vundle的安装与使用 Vim插件管理Vundle Linux 下VIM的配置 Vim配置系列( ...
- PHP:WampServer下如何安装多个版本的PHP、mysql、apache
作为Web开发人员,在机器上安装不同版本的php,apache和mysql有时是很有必要的. 今天,我在调试一套PHP程序的时候,该程序中使用的某些函数在低版本中无法使用,所以只能在搞个高版本的php ...
- JAVA框架之Hibernate【配置文件详解】
Hibernate配置文件主要功能是配置数据库连接和Hibernate运行时所需的各种属性,配置文件应该位于JAVA应用或者JAVA Web应用的类文件中,刚开始接触Hibernate的时候,感觉Hi ...
- php -- 表单多选
----- 011-form.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...
- mysql 删除单表内多个字段重复的数据
mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...
- Disruptor入门
一.什么是 Disruptor Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式实现,或者事件-监听模式的实现,直接称disrup ...
- LNP环境下Nginx与PHP配合解析的原理
正在理解中,查阅资料,加上自我理解,得出如下结论,如有错误,欢迎指正.... LNP环境,Nginx与PHP配合运行的原理解释: 以前的互联网时代我们成为web1.0时代,那时用户是被动接受网络信息, ...
- webpack版本兼容性问题错误总结,耽误半天学习
今天看了掘金上的一篇文章(https://juejin.im/post/5bf61082f265da616a474b5c#comment),想搞搞webpack拆分js. 开搞 文章中用了webpac ...
- 浅析libuv源码-编译启动
面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起. V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁:而libuv则是负责操作系统底层功能的 ...
- Infopath 2010 接收SQL Server数据
Infopath2010为我们提供了多种接收数据的方式,今天我来讲讲里面其中的一种直接读取SQL Server数据库表数据方法(高阶者的下面可以略省,只针对入门者). 1.选择数据库(SQL) 2.选 ...