您的位置:首页 > 移动开发

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

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

第三种:session属性





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

Session_01.jsp
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%  //设置属性
session.setAttribute("name","赵玉强"); //将赵玉强赋给name
%>
<a href="session_02.jsp">通过连接访问</a>
</body>
</html>

Session_02.jsp
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%  //设置属性
String username=(String)session.getAttribute("name");
%>
<h2>姓名:<%=username%></h2>
</body>
</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属性直接保存在服务器上,直接属性服务器管辖的范围了,不在受其他的一些因素影响。即使是浏览器关闭了,只要服务器没有关闭,依然可以进行操作。

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

Application_01.jsp
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%  //设置属性
application.setAttribute("name","赵玉强");
%>
<a href="page02.jsp">通过连接访问</a>
</body>
</html>

Application_02.jsp
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%  //设置属性
String username=(String)application.getAttribute("name");
%>
<h2>姓名:<%=username%></h2>
</body>
</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在本页的最后有下载,是英文版本的,有的同学可能不喜欢,不过英文版本的才是原汁原味的,你可以把方法复制下来去谷歌百度翻译。

附件:http://down.51cto.com/data/2362258
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session application
相关文章推荐