一、作用域范围
  • Request       保存的键值仅在下一个request对象中可以得到,作用于两个有请求关系的页面
  • Session        它是一个会话范围,相当于一个局部变量,从Session第一次创建直到关闭,数据都一直 保存,每一个客户都有一个Session,所以它可以被客户一直访问,只要Session没有关闭和超时即浏览器关闭。同一个浏览器对象。
  • servletContext    它代表了servlet环境的上下文,相当于一个全局变量,即只要某个web应用在启动中,这个对象就一直都有效的存在,所以它的范围是最大的,存储的数据可以被所有用户使用,只要服务器不关闭,数据就会一直都存在。同一个服务器对象
二、具体应用
  • scopeServlet.java 设置各值(scopeServlet.java 和getScopeServlet.java没有请求关系,即两者没有互相跳转)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("num", "10");
request.getSession().setAttribute("num", "100");
this.getServletContext().setAttribute("num", "1000");}
  • getScopeServlet.java 获取设置的值
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getAttribute("num"));
System.out.println(request.getSession().getAttribute("num"));
System.out.println(this.getServletContext().getAttribute("num"));
}
结果 :
  1.  先访问scopeServlet.java,再访问getScopeServlet.java,
可见,requst的值是空的,因为两个页面没有请求关系,所以requst的值无法传递。
 
  2.  在1的操作之后,关闭浏览器 ,再打开 然后访问getScopeServlet.java
可见,requst的值依旧空,但session对象的值也消失了,因为一个浏览器只有一个session对象。
  3.  重启服务器,然后访问getScopeServlet.java
全部值都是空的。
 
 

三、注意

  • 要实现scopeServlet.java和getScopeServlet.java的跳转即请求,只需要在scopeServlet.java文件中添加request.getRequestDispatcher("getscope").forward(request,response);

    getRequestDispatcher("getscope")跳转到getscope,getscope可以是servlet文件也可以是html文件,forward(request,response)指向前跳转,并把requst传过去,所以getscope页面可以那得到本页面的requst的值。具体请看serlvet通信。

 
  •  首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。

    那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。 
     
            所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。 
     
            PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。 
     
 
 
 
 

(十一)会话跟踪技术之作用域(request、session、servletContext)的更多相关文章

  1. JSP基础--会话跟踪技术、cookie、session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  2. Web---session技术代码演示(request,session,servletContext)

    Session会话简介与基本知识点 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户. 会话是指在一段 ...

  3. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  4. Cookie&Session会话跟踪技术

    今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置pa ...

  5. 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例

    目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...

  6. JavaEE基础(04):会话跟踪技术,Session和Cookie详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...

  7. cookie和session的区别与会话跟踪技术

    会话跟踪技术: HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟 ...

  8. 四种会话跟踪技术以及jstl介绍

    四种会话跟踪技术 page:代表与一个页面相关的对象和属性.一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示.这既包括 ...

  9. Django - cookies 会话跟踪技术

    一.HTTP协议的无状态保存 两次请求之间没有关联 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2.会话路径技术使用Cookie或session完成 我们知道HTTP ...

随机推荐

  1. seastar笔记

    1.seastar::A.then([]{B});C:的核心思想是说我们开始了A之后就开始B,开始B之后就开始C,而不需要等A做完了再做B,B做完再做C 2.通常的return是一个需要执行的函数,例 ...

  2. tomcat配置虛擬路徑

    1.server.xml设置 打开Tomcat安装目录,在server.xml中<Host>标签中,增加<Context docBase="硬盘目录" path= ...

  3. vue1 监听数据变化

  4. Django REST framework+Vue 打造生鲜电商项目(笔记十)

    (from:https://www.cnblogs.com/derek1184405959/p/8877643.html  有修改) 十三.首页.商品数量.缓存和限速功能开发 首先把pycharm环境 ...

  5. 远程jupyter+pycharm配置

    前言 作为一个数据工程师,最喜欢的事情就是不停的在现实的服务端环境调试代码的参数.我们在本地的环境与生产的状况决然不同,我们一开始在本地写代码测试再部署到服务端的三板斧就不适用了. 最好的方式可以直接 ...

  6. python - django (母版与组件)

    # 把多个页面通用的部分提取出来 放在一个母版中 # 其它的页面只需要继承 母版就可以 # 使用步骤:( 继承的语句要放在第一行 ) """ 1. 把公用的 HTML 部 ...

  7. CefSharp支持flash

    https://www.cnblogs.com/yaosj/p/10811687.html

  8. bash: sz: command not found

    Linux系统中如果没有安装 lrzsz这个包,就会报rz.sz命令找不到,安装即可解决. 命令: yum install lrzsz 效果图:

  9. MySQL-时间日期类型

    一.MySQL中 日期和时间类型 表示时间值的日期和时间类型为 DATETIME.DATE.TIMESTAMP.TIME和YEAR. 每个时间类型有一个有效值范围和一个"零"值,当 ...

  10. 1-git的安装和基本使用

    说一下,我希望都要会用git,git很好用, 代码管理,多人合作开发一个项目,版本记录等等 https://gitee.com/    去上面注册一个账户 https://git-scm.com/do ...