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 它对应真 ...
随机推荐
- Nginx配置SSL自签名证书
生成自签名SSL证书 生成RSA密钥(过程需要设置一个密码,记住这个密码) $ openssl genrsa -des3 -out domain.key 1024 拷贝一个不需要输入密码的密钥文件 $ ...
- JavaSE-java8-谓词复合的用法
谓词接口包括三个方法: negate. and 和 or,让你可以重用已有的Predicate来创建更复杂的谓词 一.比如可以用negate方法来返回一个Predicate非 public class ...
- 持续集成 TeamCity 的配置与使用
环境:实现自动编译与自动化测试,发布到远程服务器,环境 VS2015 +WIN2008R2 什么是TeamCity TeamCity是由Jetbrains开发的一款功能强大的持续集成(Continue ...
- Android_EditText 打勾显示输入的密码 --EditText与setTransformationMethod
实现目标: 实现原理: 为CheckBox添加一个监听器事件; 实现的源码: package edu.cquptzx.showPassword; import android.app.Activity ...
- nginx服务器搭建以及配置
2019年第一篇博客,在新的一年祝大家新年快乐,技术更上一层楼. 今天在公司搞了好长时间的nginx服务器搭建,以及遇到的问题,总结一下,方便查询 这里使用的是百度云的服务器,CentOS7系统的 N ...
- postgresql 常用命令
普通用法: sudo su - postgres 切换到postgres用户下: psql -U user -d dbname 连接数据库, 默认的用户和数据库是postgres \c dbname ...
- Executor简介
Executor是一个接口,这个接口负责执行提交给它的任务(Runnable对象).这个接口能够使“任务提交”与“任务执行”解耦.即某人只要把任务提交给Executor就好了,至于它怎么给任务 ...
- Java NIO系列教程(九) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.ServerSocketChannel类在 jav ...
- Java设计模式学习记录-代理模式
代理模式 代理模式是常见设计模式的一种,代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起 ...
- 递推、数位DP解析(以HDU 2089 和 HDU 3555 为例)
HDU 2089 不要62 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人 ...