为你介绍JAVA中Session的会话状态

发布时间:2023-09-10 点击:163
会话状态的维持是开发web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用cookies,hidden类型的表单域,或直接把状态信息加到url中等,还有servlet本身提供了一个httpsession接口来支持会话状态的维持,在这里我们主要介绍基于这个接口的会话状态的管理。
session的发明是为了填补http协议的局限。请注意http协议是如何工作的–用户发出请求,服务器作出响应,这种用户端和服务器97色色端的联系就是离散的,非连续的。http协议不能提供允许服务器跟踪用户请求的功能。在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。从服务器这端来看,每一个请求都是独立的,因此http协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道他的身份。 session的出现就是为了弥补这个局限。利用session,您就可以当一个用户在多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。
在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个session。
java servlet定义了一个httpsession接口,实现的session的功能,在servlet中使用session的过程如下:
(1) 使用httpservletrequest的getsession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以使用方法getsession(true)
(2) 写session变量。可以使用方法httpsession.setattribute(name,value)来向session中存储一个信息。也可以使用httpsession.putvalue(name,value),但这个方法已经过时了。
(3)读session变量。可以使用方法httpsession.getattribute(name)来读取session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getattribute读出的变量类型是object,必须使用强制类型转换,比如:
string uid = (string) session.getattribute(uid);
也可以使用httpsession.getvalue(name),但是这个方法也已经过时了。
(4) 关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,servlet引擎在一段时间之后,自动关闭seesion。
下面举一个简单的例子说明session的使用
//97色色 sessionexample.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
//导入必要的软件包
public class sessionexample extends httpservlet
{
public void doget(httpservletrequest request, httpservletresponse response)
throws ioexception, servletexception //实现doget方法
{
response.setcontenttype(text/html); //设置http头
printwriter out = response.getwriter(); //得到输出97gan
httpsession session = request.getsession(true);
//得到session对象
//打印html标记
out.println(<html>);
out.println(<head>);
out.println(<meta http-equiv=\\\\content-type\\\\ content=\\\\text/html; charset=gb2312\\\\>);
out.println(</head>);
out.println(<body>);
date created = new date(session.getcreationtime());
//得到session对象创建的时间
date accessed = new date(session.getlastaccessedtime());
//得到最后访问该session对象的时间
out.println(id session.getid() <br>);
//得到该session的id,并打印
out.println(created: created <br>);
//打印session创建时间
out.println(last accessed: accessed <br>);
//打印最后访问时间
session.setattribute(uid,12345678);
//在session中添加变量uid=12345678
session.setattribute(name,tom);
//在session中添加变量name=tom
enumeration e = session.getattributenames();
//得到session中变量名的枚举对象
while (e.hasmoreelements()) { //遍历每一个变量
string name = (string)e.nextelement(); //首先得到名字
string value = session.getattribute(name).tostring();
//由名字从97gan中得到值
out.println(name = value <br>); //打印
}
out.println(</body>); //打印html标记
out.println(</html>);
}
}
}

后台用不了-虚拟主机/数据库问题
电脑设置Tenda路由器使用二级桥接模式上网的方法
闲置的云服务器挂游戏
网站域名注册哪家好?如何选域名注册平台?
武汉网站建设收费
无法连接上空间-虚拟主机/数据库问题
中小企业应如何利用小程序推广转化?
拍到家改叫京东到家 域名换成pdj.jd.com