举个购物流程的例子:

这整个购物过程,它是属于一次回话。那么这个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对象的更多相关文章

  1. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  2. JSP内置对象——session

    sessionsession表示客户端与服务器的一次会话Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所进过的这段时间,也就是用户浏览这个网站所花费的时间从上述定义中可以看 ...

  3. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

  4. JSP内置对象有哪些呢?

    内置对象 request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的 ...

  5. JSP内置对象-request

    JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...

  6. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. Jsp内置对象及EL表达式的使用

    一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...

  8. Java遇见HTML——JSP篇之JSP内置对象(上)

    一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...

  9. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  10. jsp内置对象和el表达式

    九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真 ...

随机推荐

  1. 【原创】SQL Server 性能调优读书笔记

    CPU 100%: 有时可能是硬盘性能不足,或者内存容量不够,让CPU一直忙于I/O. 导致性能问题的一些因素: 用户习惯:在运行尖峰时刻做一些不必做但消耗资源的事情,如之行数据库完整备份,如在服务器 ...

  2. Redis随笔(六)RESP的协议规范

    1.官网文档 https://redis.io/topics/protocol http://www.redis.cn/topics/protocol.html 2.协议介绍 redis协议规范(Re ...

  3. JavaScript -- Enumerator

    -----022-Enumerator.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...

  4. 在自己网站中引入CU3ER/Flash 3D幻灯片效果和照片画框

    要求 必备知识 本文要求基本了解 JAVASCRIPT 和 XML基础语法知识. 运行环境 支持Flash Player的浏览器/Flash Player11及以上 演示地址 演示地址 下载地址   ...

  5. mysql5.7主从复制配置——读写分离实现

    为什么使用主从架构?1.实现服务器负载均衡:2.通过复制实现数据的异地备份:3.提高数据库系统的可用性:4.可以分库[垂直拆分],分表[水平拆分]: 主从配置的前提条件1.MySQL版本一致:2.My ...

  6. tensorflow 导入新的tensorflow实例

    因为涉及到同一台电脑多个GPU,在指定tensorflow图的时候,需要为不同的图指定不同的GPU,所以必须在导入tensorflow之前,指定可用的GPU def import_tf(device_ ...

  7. MySQL slave状态之Seconds_Behind_Master【转】

    在MySQL的主从环境中,我们可以通过在slave上执行show slave status来查看slave的一些状态信息,其中有一个比较重要的参数Seconds_Behind_Master.那么你是否 ...

  8. Tomcat学习总结(13)—— Tomcat常用参数配置说明

    1.修改端口号 Tomcat端口配置在server.xml文件的Connector标签中,默认为8080,可根据实际情况修改. 修改端口号 2.解决URL中文参数乱码 在server.xml文件的Co ...

  9. Vue源码之 virtual-dom 实现简析

    发现两篇写得特别好的博文,仔细通读,发现豁然开朗. 浅析Vue 中的patch和diff Vue 2.0 的 virtual-dom 实现简析

  10. Netty 高性能之道 FastThreadLocal 源码分析(快且安全)

    前言 Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,例如 Thread 类,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThre ...