jsp实验4.(2)session

来源:互联网 发布:马克威算法交易平台 编辑:程序博客网 时间:2024/06/06 02:17

2、题目要求:(X.jspY.jsp)增加代码,在网页X.jsp中设置session变量course的值为“移动Web应用设计”+当前时间(new Date()),在网页Y.jsp和网页Z.jsp中可以取出并显示该变量的值。 所有网页都会显示session ID的值。每个网页都有到另两个网页的链接。

HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。

有三种方法来维持客户端与服务器的会话:

Cookies

隐藏表单域

重写URL

除了以上几种方法外,JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。

默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:

<%@ page session="false" %>
——参考http://www.runoob.com/jsp/jsp-session.html

首先,充分理解session:

1.http协议是无状态的,但是通过session可以在Web服务器上临时保存少量
变量的状态。
session保存的状态只与当前浏览器相关。在用户第一次访问
页面时
Web服务器就会送回sessionId(作为cookie)。服务器根据sessionId访
session变量。 

2.通过服务器端语言(JSPASP.netPHP)设置session对象。 一个网站的后台程
序可以利用
session 变量在后台(服务器)保留状态。sessionWeb服务器
有关,一个
Web服务器中设置的session,另一个Web服务器访问不了。
3.如果一个网站的后台程序设置了session变量,当通过浏览器第一次访问该
网站时,服务器脚本语言就会生成一个唯一的
session ID,并作为cookie传送
到客户端保存。以后每次访问该网站,该
session ID都会和其它cookie一起送
到服务器。通过
session ID服务器端可以找到为该session保存的变量,使得
这些变量可以被不同网页所共享。

4.session的生命周期和浏览器有关,浏览器关闭session将被删除。但是如果
你长时间不关闭浏览器,又不访问该网站,
session的生命周期也会结束,
一般是三十分钟。

这里用到的一个session对象的函数原型:

public void setAttribute(String name, Object value) 

使用指定的名称和值来产生一个对象并绑定到session中X.jsp的完整代码如下:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312" contentType="text/html;charset=GB2312"%><% session.setAttribute("course", "移动Web应用设计"+ new Date()); %><% String id= session.getId(); %><!DOCTYPE  html><html  lang="zh-cn"><head><title>Session X</title></head><body>  <h1>Session X</h1>    sessionID:<%= id%><br><a href=Y.jsp>Y.jsp</a> <br><a href=Z.jsp>Z.jsp</a></body></html>
生成了session对象,course对应的值为“移动web应用设计”+当前时间,在页面中将sessionID显示出来。

Y.jsp的代码如下:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312" contentType="text/html;charset=GB2312"%><% String course = (String)session.getAttribute("course"); %> <% String id= session.getId(); %><!DOCTYPE  html><html  lang="zh-cn"><head><title>Session Y</title></head><body>  <h1>Session Y</h1>  sessionID:<%= id%><br>  course:<%= course %><br>  <a href=X.jsp>X.jsp</a> <br><a href=Z.jsp>Z.jsp</a></body></html>
可以看到获取到了的sessionID和x.jsp中的sessionID是一样的,每次访问该网站,该session ID都会和其它cookie一起送到服务器。通过session ID服务器端可以找到为该session保存的变量,使得这些变量可以被不同网页所共享。 

Z.jsp的完整代码如下:

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312" contentType="text/html;charset=GB2312"%><% String course = (String)session.getAttribute("course"); %> <% String id= session.getId(); %><!DOCTYPE  html><html  lang="zh-cn"><head><title>Session Z</title></head><body>  <h1>Session Z</h1>   sessionID:<%= id%><br>    course:<%= course %><br>    <a href=X.jsp>X.jsp</a><br>    <a href=Y.jsp>Y.jsp</a></body></html>
效果和Y.jsp是一样的。

仅当再次点击X.jsp(再次设置session对象中的course的值时),Y.jsp和Z.jsp看到的session对象中的course值也是会更新的。

回答问题:

2)在哪些情况下,该浏览器显示的session ID会发生变化:

重新启动浏览器时。session的生命周期和浏览器有关,浏览器关闭session将被删除。但是如果你长时间不关闭浏览器,又不访问该网站,session的生命周期也会结束,一般是三十分钟。 

3)在不同浏览器中浏览这些网页,session ID是否相同?

都不同

4)通过上面的实验,你如何说明session的含义?

session保存的状态只与当前浏览器相关。在用户第一次访问页面时Web服务器就会送回sessionId(作为cookie)。服务器根据sessionId访问session变量。




public void setAttribute(String name, Object value) 

使用指定的名称和值来产生一个对象并绑定到session中
0 0
原创粉丝点击