我们继续来学习,上一篇文章中说到了request属性,那么既要想客户端和服务端都都能实现跳转的话,就用到了session。

第三种:session属性

我们接着修改一下上一篇文章中的代码来对比一下:

  1. Session_01.jsp
  2. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
  3. <html>
  4. <head>
  5. <title>web开发</title>
  6. </head>
  7. <body>
  8. <%  //设置属性
  9. session.setAttribute("name","赵玉强"); //将赵玉强赋给name
  10. %>
  11. <a href="session_02.jsp">通过连接访问</a>
  12. </body>
  13. </html>
  14. Session_02.jsp
  15. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
  16. <html>
  17. <head>
  18. <title>web开发</title>
  19. </head>
  20. <body>
  21. <%  //设置属性
  22. String username=(String)session.getAttribute("name");
  23. %>
  24. <h2>姓名:<%=username%></h2>
  25. </body>
  26. </html>

运行一下就会发现,即使是以超链接的形式,也依然能够接受参数。可见session的属性范围的确是比request大了。session是一个应用广泛的属性。它有一个响亮的名字:一次性会话机制。

我们先来看一个问题。在浏览器上运行session_01.jsp这个页面,会跳转到session_02.jsp上,这个时候不要关闭浏览器,在地址栏中直接输入session_02.jsp的地址,可以发现会直接显示session_02.jsp的内容,那我们关闭浏览器,在重新打开一个新的浏览器,直接输session_02.jsp的地址,一运行,结果不显示值了。那么问题就来了,为什么重新开启一个浏览器就不行了呢?这就是session的特点:一次性会话机制。

什么是session的会话?

会话就行我们在打电话一样,我们双方都在通讯,如果有一个挂断了,那么这次会话就结束了。session也是一样的。先输入session_01.jsp地址,然后跳转后,session就会保存在当前的浏览器中,即使直接输入session_02.jsp的地址,依然能显示。但是如果在打开一个新的浏览器的话,则就无法取得之前设置的session了,因为每一个session只保存在当前的浏览器中,并且可以从相关的页面中取得。

对于服务器而言,每一个连接到它的客户端都是一个session。

可见,即使session的属性范围比request扩大了,但是依然存在着限制。要想重新打开浏览器还会显示,那就得使用application属性范围了。

第四种:application属性

我们从上图中可以看出,所有的application属性直接保存在服务器上,直接属性服务器管辖的范围了,不在受其他的一些因素影响。即使是浏览器关闭了,只要服务器没有关闭,依然可以进行操作。

我们来验证一下,还是拿上述的的代码修改一下,为了对比明显。

  1. Application_01.jsp
  2. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
  3. <html>
  4. <head>
  5. <title>web开发</title>
  6. </head>
  7. <body>
  8. <%  //设置属性
  9. application.setAttribute("name","赵玉强");
  10. %>
  11. <a href="page02.jsp">通过连接访问</a>
  12. </body>
  13. </html>
  14. Application_02.jsp
  15. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
  16. <html>
  17. <head>
  18. <title>web开发</title>
  19. </head>
  20. <body>
  21. <%  //设置属性
  22. String username=(String)application.getAttribute("name");
  23. %>
  24. <h2>姓名:<%=username%></h2>
  25. </body>
  26. </html>

运行看一下,即使新开一个浏览器,直接输入application_02.jsp的地址,也依然能够显示内容。

但是如果服务器关闭了,那就无法取得了。

经过上一篇http://zhaoyuqiang.blog.51cto.com/6328846/1130617和这一篇的学习,我们一起学习了jsp内置对象中的最重要的四种内置对象。从学习中可以看出,四种内置对象page、request、session和application的属性范围是依次扩大的,那么有的同学就直接用最大的,这样多省事了。这个问题就坚决避免的。因为属性范围越大,对于服务器的性能影响也就越大,这个时候就给出了一个原则: 能使用page范围的就不要使用request,能使用request范围的就不要使用session,能使用session的就不要使用application。这对初学者简单的做个项目可能不会有多大影响,但是公司做的项目影响可就大了,所以同学们要养成一个好的习惯。


注意的是,内置对象中的所有的方法都应该在Java Servlet Api 中查找,而不是学习java的时候用的那个API,Java Servlet Api在本页的最后有下载,是英文版本的,有的同学可能不喜欢,不过英文版本的才是原汁原味的,你可以把方法复制下来去谷歌百度翻译。


转载于:https://blog.51cto.com/zhaoyuqiang/1131062

jsp内置对象【02】四种内置对象【02】session、application相关推荐

  1. Spring Data JPA-JPA对象的四种状态

    Spring Data JPA-JPA对象的四种状态 JPA对象的四种状态 临时状态:刚创建出来,∙没有与EntityManager发生关系,没有被持久化,不处于EntityManager中的对象.实 ...

  2. 回过头来看对象的四种状态强软弱虚引用的理解

    一.对象的四种引用状态描述 在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Refe ...

  3. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

  4. 在Action类中获得HttpServletResponse对象的四种方法

    Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...

  5. 用spring管理和实例化对象的四种方式

    用spring管理和实例化对象的四种方式 方式一:无参构造函数(最常用) 对象是spring创建,创建的对象还要交给spring容器管理 bean:豆子 id:在spring容器中Hello对象的名, ...

  6. jsp九大内置对象和四种属性范围介绍

    一般对象需要实例化才可以调用,而JSP的内置对象是不用实例化就可以直接调用的对象. 总共有9个,对应如下表: 序号 对象 类型 1 pageContext javax.servlet.jsp.Page ...

  7. Jsp学习总结(1)——JSP九大内置对象和四种属性范围解读

    一.四种属性范围 1.1.在JSP中提供了四种属性保存范围 page:在一个页面内保存属性,跳转之后无效 request:在一次服务请求范围内,服务器跳转后依然有效 session:-在一次会话范围内 ...

  8. Java对象的四种引用方式

    本文会按照以下思路进行: (1)Java的四种对象引用的基本概念 (2)四种对象引用的差异对比 (3)对象可及性的判断以及与垃圾回收机制的关系 (4)引用队列ReferenceQueue的介绍 (5) ...

  9. Java对象的四种引用

    前言 在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用.也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.垃圾回收器一旦发现这些无用对象, ...

最新文章

  1. 关于exchange 2013输入账号密码后owa空白页解决方法
  2. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  3. 小白的算法初识课堂(part1)--二分查找法
  4. jq循环取数据 ,一直记不住,放到这
  5. 【转】Apache Solr 访问权限控制
  6. Monkey测试执行指导
  7. 阅读作业二-----读Lost in CatB有感 by 李栋
  8. 百度富文本php配置方法
  9. 什么软件可以搜C语言题答案,C语言题库(带答案)-排版Word版
  10. 智能车制作——从元器件、机电系统、控制算法到完整的智能车设计|文末赠书
  11. 深度学习教程(4) | 深层神经网络(吴恩达·完整版)
  12. 动效给程序员用什么格式_超炫酷的H5动效!学若干招让程序猿帮你实现吧-动画-程序员-_ 卡酷动画片...
  13. 谈谈订单号和流水号的关系
  14. 【H3C模拟器】基于端口VLAN的交换机配置实验(同一vlan互通)
  15. 基于VUE + Echarts 实现可视化数据大屏智慧校园可视化
  16. 领导人要读的10本管理学书籍
  17. 20190803——python文件操作
  18. 2018深信服java笔试题_2018校招深信服编程题与面试题
  19. 天玑9200搭载Arm最新旗舰GPU,性能爆表!支持移动端硬件光追
  20. NASA庆祝地球日:50年地球最精美图片亮相(转载)

热门文章

  1. Android studio | From Zero To One ——初级控件(屏幕显示)
  2. MFC与Matlab编程总结 (以《Matlab与C/C++混合编程技术(第三版)》-刘维 第五章 生成DLL为例)
  3. 回首2020,我们砥砺前行
  4. Debug Pytorch: ValueError: Expected more than 1 value per channel when training, got input size tor
  5. Debug Tensorflow: TypeError: Cannot convert a symbolic Keras input/output to a numpy array.
  6. python源码精要(6)-CPython编译标志
  7. c++17(6)-数学 函数
  8. 【NLP】向量检索模型落地:瓶颈及解法!
  9. (GitHub标星6.9k)超详细的人工智能专家路线图,
  10. 【CVPR2020论文解读】300米远程深度估计:港科大重磅开源自动驾驶深度感知新技术,远超现有雷达...