通过
HttpSession入门知识的学习,我们对HttpSession有了一定的了解。为了更深入的学习HttpSession,掌握其功能,下面我们来练习一个案例,具体如下所示:
首先,我们对本案例进行功能分析,在一个jsp页面中向session域中保存数据,然后在另一个jsp页面中从session域中获取数据。具体步骤如下所示:
(1)创建一个web应用,Example21,在该应用下的WebRoot目录下新建一个jsp页面,名称为save.jsp,主要代码如例1-1所示:
例1-1 save.jsp
<body>
<h1>向session域保存数据</h1>
<%
session.setAttribute("aaa", "AAA");
%>
</body>
例1-1中,因为session是jsp的内置对象,所以可以直接使用。
(2)在WebRoot目录下再次新建一个jsp页面,名称为get.jsp,主要代码如例1-2所示:
例1-2 get.jsp
<body>
<h1>获取session中的数据</h1>
<%
String s = (String)session.getAttribute("aaa");
%>
<%=s %>
</body>
例1-2中,先从session域中获取数据,然后再输出到浏览器端。
(3)将Example21发布到Tomcat服务器中,然后启动服务器,在浏览器端访问:http://localhost:8080/Example21/save.jsp,将数据存储在session域中,然后再访问get.jsp,浏览器显示结果如图1-1所示:
图1-1 浏览器显示结果
由图1-1可知,在访问save.jsp时确实将数据保存在了session域中。这时,如果打开一个新的窗口再次访问get.jsp,session域中的数据能够取出来吗?
(4)打开一个新的浏览器窗口,之前的窗口不关闭,在新窗口中再次访问get.jsp,浏览器显示结果如图1-2所示:
图1-2 浏览器显示结果
图1-2中也能从session域中获取数据,原因是我们说过session是依赖于Cookie的,我们在
Cookie的路径和域中曾经看到过一个名字为JSESSIONID的Cookie,这个cookie的过期时间就是浏览器关闭该cookie就是消失,刚才在新的窗口中访问get.jsp时,之前的窗口并没有关闭,那么JSESSIONID这个cookie就仍然存在于内存中,所以第二次访问时能够找到session,从而可以从session中取出数据。大家看到这里可能还有一些不明白,我们会在后面的
session原理中详细说明。
(5)选择图1-2中的工具栏选项中的【文件】,在其下拉选项中选择【新建会话】,如图1-3所示:
图1-3新建一个会话
(6)点击图1-3中的“新建会话“,就打开一个新的会话,然后再次访问get.jsp,浏览器显示结果如图1-4所示:
图1-4 浏览器显示结果
图1-4中,输出null,表明没有从session中获取到数据。新建会话,表示重新开启一次会话,那么服务器会重新创建一个session对象,所以在get.jsp页面中通过request.getSession()获取到的session就是新创建的session,该session中并没有存放数据,所以才获取不到。
(7)在IE浏览器中再次访问save.jsp,往session中存放数据,然后再打开谷歌浏览器访问get.jsp,观察是否能从session中获得数据,浏览器显示结果如图1-5所示:
图1-5 谷歌浏览器显示结果
图1-5中,访问get.jsp没有获取到session中的数据,原因是:session是依赖于Cookie,而Cookie是不能跨浏览器的,也就是说使用IE浏览器访问save.jsp,服务器创建一个session对象,由于Cookie不能跨浏览器,所以使用谷歌浏览器访问时,服务器会创建另一个session对象,因此谷歌浏览器访问get.jsp不能获取到上一个session中的数据。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee