jsp内置对象【02】四种内置对象【02】session、application

 我们继续来学习,上一篇文章中说到了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.   
  15.  Session_02.jsp 
  16.  <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  17.  <html> 
  18.  <head> 
  19.  <title>web开发</title> 
  20.  </head> 
  21.  <body> 
  22.  <%  //设置属性 
  23.      String username=(String)session.getAttribute("name"); 
  24.  %> 
  25.  <h2>姓名:<%=username%></h2> 
  26.  </body> 
  27.  </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.   
  15.  Application_02.jsp 
  16.  <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  17.  <html> 
  18.  <head> 
  19.  <title>web开发</title> 
  20.  </head> 
  21.  <body> 
  22.  <%  //设置属性 
  23.      String username=(String)application.getAttribute("name"); 
  24.  %> 
  25.  <h2>姓名:<%=username%></h2> 
  26.  </body> 
  27.  </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在本页的最后有下载,是英文版本的,有的同学可能不喜欢,不过英文版本的才是原汁原味的,你可以把方法复制下来去谷歌百度翻译。

 

 

你可能感兴趣的:(jsp,session,application,javaweb开发,jsp内置对象)