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>");
}
}
}
0
0
相关文章
Java 文件读取中正确过滤注释行与空行的完整实践指南
Java 中的原子性操作不保证可见性:volatile 不可替代
Java 8/9 中生成两个日期之间所有日期列表的完整实现
Java 实现双人回合制骨牌游戏:玩家与CPU交替对战教程
如何在Java中监控线程池的运行指标_继承ThreadPoolExecutor并收集ActiveCount发送到监控系统
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
1051
2023.08.02
c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。
254
2023.09.22
在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。
1111
2024.03.01
while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。
107
2023.09.25
session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。
336
2023.10.17
session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。
776
2023.10.18
本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。
69
2026.03.13
热门下载
相关下载
精品课程
最新文章



